首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将stderr重定向到stdout和stderr本身

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

Stack Overflow用户
提问于 2015-09-16 20:08:25
回答 2查看 189关注 0票数 1

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

假设command在stderr中有输出,我希望将stderr中的所有内容输出到屏幕,同时通过grep处理信息,并将其保存到一个变量中。

我试过了

代码语言:javascript
复制
line=$(command 2>&1  | grep 'aaa' )

$line传递了所需的信息,但screen不显示任何输出。

我试过了

代码语言:javascript
复制
line=$(command 2>&1 | tee >&2 |grep 'aaa' )

这可以很好地处理屏幕上的信息输出,但是$line不会获得任何值。

EN

回答 2

Stack Overflow用户

发布于 2015-09-16 21:24:53

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

代码语言:javascript
复制
% cat out.sh
echo "OUT"
echo "ERR" 1>&2

运行:

代码语言:javascript
复制
% sh out.sh 1>&2 2>&1 | grep OUT > /tmp/a
ERR
OUT
% cat /tmp/a
OUT

这似乎就是你所期待的。现在为什么它会起作用呢?

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

因此stdout和stderr都会得到相同的流。那么stdout是贪婪的。

票数 1
EN

Stack Overflow用户

发布于 2015-09-16 20:29:29

代码语言:javascript
复制
$ 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
stderr
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32608185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档