我想做的是将stderr重定向到stdout,而不改变stderr的输出。
假设command在stderr中有输出,我希望将stderr中的所有内容输出到屏幕,同时通过grep处理信息,并将其保存到一个变量中。
我试过了
line=$(command 2>&1 | grep 'aaa' )$line传递了所需的信息,但screen不显示任何输出。
我试过了
line=$(command 2>&1 | tee >&2 |grep 'aaa' )这可以很好地处理屏幕上的信息输出,但是$line不会获得任何值。
发布于 2015-09-16 21:24:53
您可以按正确的顺序使用重定向复制流。考虑一下:
% 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复制到2>&1将stderr复制到stdout因此stdout和stderr都会得到相同的流。那么stdout是贪婪的。
发布于 2015-09-16 20:29:29
$ sh -c 'echo stdout; echo stderr >&2'
stdout
stderr
$ output=$( sh -c 'echo stdout; echo stderr >&2' 2> >( tee >( cat >&2) ) )
# ...............................................^^^^^^^^^^^^^^^^^^^^^^^
stderr
$ echo "$output"
stdout
stderrhttps://stackoverflow.com/questions/32608185
复制相似问题