我想要做的是将stderr重定向到stdout而不改变stderr的输出 .
比方说, command
在stderr中有输出,我想把所有的stderr放到屏幕上,同时也通过grep处理信息并将其保存到变量中 .
我试过了
line=$(command 2>&1 | grep 'aaa' )
$ line与所需信息一起传递,但屏幕不显示任何输出 .
我试过了
line=$(command 2>&1 | tee >&2 |grep 'aaa' )
这可以很好地用于屏幕上的信息输出,但$ line没有任何 Value .
2 回答
您可以通过一些流程替换获得幻想:
您可以使用正确顺序的重定向复制流 . 考虑:
运行:
这似乎是你所期待的 . 现在它为什么有效?
1>&2
重复stdout
至stderr
2>&1
重复stderr
至stdout
所以stdout和stderr都获得相同的流 . 然后stdout被greped了 .