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

30 command-line

应该使用例如打印的使用消息

 command -?
Run Code Online (Sandbox Code Playgroud)

Unix 命令转到 stderr 或 stdout,为什么?如果用户在选项上犯了错误,它应该去同一个地方吗?

cjm*_*cjm 53

它应该转到标准输出,因此您可以键入:

command --help | less
Run Code Online (Sandbox Code Playgroud)

上的Gnu 编码标准--help也建议这样

另一方面,当您使用无效选项或省略必需参数时获得的使用消息应该转到 stderr,因为它是一条错误消息,您不希望它提供给管道中的下一个命令。

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

当您说 时command --bogus-option | other-command,您不希望使用消息进入标准输出,因为它现在是不应由 处理的意外输出other-command。此外,如果 的输出--help不止几行,则使用错误消息应仅包含--help输出的摘要,并请用户参考以--help获取更多详细信息。

  • 也许,但它们不一定是相同的信息。如果 `--help` 的输出超过几行,那么无效选项产生的使用消息应该只是一个简短的摘要,说使用 `--help` 来查看完整信息。 (7认同)
  • +1 - 这是 100% 正确的,我认为这里没有任何分歧的余地。 (5认同)