确定输出是stdout还是stderr


Answers:


22

我仅知道三种确定程序将输出到STDOUT以及将什么输出到STDERR的方法

  1. 阅读文档。要么

  2. 尝试进行重定向†

  3. 用红色打印STDERR

†例如:

program > program.stdout 2> program.stderr

然后查看两个输出文件,以查看程序已写入STDOUT的内容以及程序已写入STDERR的内容。

tee如果您需要输出以继续进入屏幕以及进入文件,则可以通过管道代替重定向。参见/programming//q/692000/477035


15
我通常使用选项3的变体:program | grep .以红色打印STDOUT。
丹尼斯

用红色打印几乎就是我想要的。感谢RedGrittyBrick和Dennis
Rauffle 2012年

7

根据您的评论请求:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
看起来令人印象深刻。但是您介意将樱桃添加到您的树上,并解释它的作用吗?并不是周围的每个人都是专家-而且您的结构相当复杂;)
Izzy 2012年

括号用于订购。我实际上从I-forget-where那里获得了确切的形式,但是重点是使用额外的文件描述符(超出1 = stdout和2 = stderr)来获取内部括号的输出,并stdout通过一个sed命令运行,而stderr通过另一种
zebediah49

哇。不知道要使用那些额外的描述符。首先,我有点困惑(我想了解自己的跑步方式,并且对花括号有点困惑)。但现在很明显-恕我直言,OP到底想要什么。所以从我+1 :)
Izzy 2012年

这对我有帮助。我想向stderr中添加更多数据。这样就可以正确地将所有内容输出回stdout / stderr上。{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery 2013年

0

您可以将stderr重定向到文件,如果其中显示任何内容,则来自stderr。

例如 ls -a 2> ls-all.txt

如果由于任何原因将错误发送到stderr,它将被重定向到该文件。


-1

如果您要一次性执行此操作,请将其中一个重定向到其他位置。

例如,使用重定向标准>

ls -al> ls-l.txt(此处的任何输出都不来自stdout,如果看到任何输出,则必须是stderr输出)

对于stderr重定向,请使用 2>


该过程创建一个恒定的输出流,其中一些输出到stderr。我想确定哪个是输出屏幕上的内容
Rauffle 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.