使用消息应该发送到stderr还是stdout?


29

印刷的使用信息应如

 command -?

Unix命令的代码转到stderr或stdout,为什么?如果用户选择错误,是否应该将它放到同一地方?


4
附加说明:不要使用-?使用--help和-h因为--help和-h是标准的并且因为-?可以由外壳解释。
ctrl-alt-delor

1
@richard这是一个很好的观点。有趣的技巧(以bash表示):touch -- -l; ls -?—实际上,您获得的报价很长,就像传递-l给ls一样。
mattdm 2011年

@理查德 如果您不知道该命令是否接受GNU样式的长选项或是否可能支持-h除帮助消息以外的其他选项,那么'-?'(带引号)或-:给您一个很好的机会得到一条错误(和用法)消息,因为:并且?对于使用的任何内容都不是有效的选项getopt(3)
斯特凡Chazelas

@Stephane Chazelas。如果我正确理解您的评论,那么您是从程序用户的角度编写的,我认为这个问题是从某人编写程序的角度来看的。
ctrl-alt-delor

Answers:


50

它应该转到stdout,因此您可以输入:

command --help | less

Gnu编码标准--help还建议使用此功能

另一方面,当您使用无效选项或省略必需的参数时获得的使用情况消息应发送到stderr,因为这是一条错误消息,并且您不希望它被输入到管道中的下一个命令中。

使用时--help,用法消息是命令的正常输出和预期输出。因此,它进入stdout,因此可以通过管道传递给另一个命令,例如lessgrep

当您说时command --bogus-option | other-command,您不希望用法消息发送到stdout,因为它现在是意外的输出,不应由处理other-command。另外,如果的输出--help超过几行,则使用错误消息应仅包含--help输出的摘要,并向用户--help提供更多详细信息。


1
取决于某些东西,同一条消息具有两个不同的输出流,这有点令人困惑吗?

7
也许吧,但不一定是相同的信息。如果输出的结果--help多于几行,则无效选项产生的使用消息应该只是简短的摘要,--help用来查看完整的信息。
cjm 2011年

4
+1-这是100%正确的,我在这里看不到任何意见分歧的余地。
simon
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.