是否有正式的POSIX,GNU或其他指南,说明应在何处打印进度报告和日志记录信息(如“ Doing foo; foo done”之类的内容)?就个人而言,我倾向于将它们写入stderr,以便可以重定向stdout并仅获取程序的实际输出。最近有人告诉我,这不是一个好习惯,因为进度报告实际上不是错误,而应该仅将错误消息打印到stderr。
这两个职位都很有意义,当然您可以根据自己的工作细节选择一个或两个,但是我想知道是否有一个普遍接受的标准。在POSIX,GNU编码标准或任何其他这样的最佳实践列表中,我找不到任何特定的规则。
我们有一些类似的问题,但它们不能解决这个确切的问题:
何时在shell脚本中使用重定向到stderr:接受的答案表明了我倾向于做的事情,将程序的最终输出保留在stdout上,并保留给stderr。但是,尽管有论点支持,但这只是作为用户的意见而呈现的。
使用消息应该发送到stderr还是stdout?:这特定于帮助消息,但引用了GNU编码标准。这是我正在寻找的东西,不仅限于帮助消息。
那么,是否有关于打印进度报告和其他信息(不在程序实际输出中的部分)的官方规定?
stdout
实际上是剔除微调器和其他有用信息的一种安全正确的方法,但是正如许多程序员所说的那样,“沉默是黄金。如果一切正常,什么也不输出。因此,实际上,由于定义模糊,stderr总是被用来做,而且stdout可能会破坏管道顺序
stderr
报告错误消息,除非使用了--verbose
标志(此时还包括进度报告)。
stdout
与结果一起打印是使结果无用的安全方法。如果您需要将结果传送到其他程序,则该程序需要将结果与微调器分开。另外,如果将输出重定向到文件,则将看不到微调框。恕我直言。