我想要做的是将 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>&2
将stdout
复制到stderr
2>&1
将stderr
复制到stdout
因此 stdout 和 stderr 都获得相同的流。 然后对 stdout 进行 grep 处理。
关于linux - 如何将 stderr 重定向到 stdout 和 stderr 本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608185/