linux - 如何将 stderr 重定向到 stdout 和 stderr 本身

标签 linux bash shell unix io-redirection

我想要做的是将 stderr 重定向到 stdout,而不更改 stderr 的输出。

比如说,命令在stderr中有输出,我想将stderr中的所有内容输出到屏幕,同时还通过grep处理信息并将其保存到变量中。

我试过了

line=$(command 2>&1  | grep 'aaa' )

$line 已传递所需信息,但屏幕不显示任何输出。

我试过了

line=$(command 2>&1 | tee >&2 |grep 'aaa' )

这对于屏幕上的信息输出来说可以很好地工作,但是 $line 没有获得任何值。

最佳答案

您可以使用重定向以正确的顺序复制流。考虑:

% cat out.sh
echo "OUT"
echo "ERR" 1>&2

运行:

% sh out.sh 1>&2 2>&1 | grep OUT > /tmp/a
ERR
OUT
% cat /tmp/a
OUT

这似乎正是您所期望的。现在为什么它有效?

  • 1>&2stdout 复制到 stderr
  • 2>&1stderr 复制到 stdout

因此 stdout 和 stderr 都获得相同的流。 然后对 stdout 进行 grep 处理。

关于linux - 如何将 stderr 重定向到 stdout 和 stderr 本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608185/

相关文章:

python - 交叉编译的 Python 找不到基本模块(数学、运算符等)

arrays - Bash shell 数组操作

bash - 重定向到/dev/udp 时,如何强制将带有换行符的数据包设为单个数据包?

shell - Emacs ansi-term 作为登录 shell

bash - 如何让 awk 忽略双引号内的字段定界符?

c - 等待用户空间中可能完成?

linux - 如何在 Linux 上重置配置文件?

bash - 如何在期望中转义方括号?

linux - 如何将 .profile 导入 ipython 的 bash shell?

linux - 有没有办法在 Linux 中将参数分组到命令中?