使用 --help 参数调用的 bash 脚本应该返回 0 还是非零退出代码? [关闭]

Posted

技术标签:

【中文标题】使用 --help 参数调用的 bash 脚本应该返回 0 还是非零退出代码? [关闭]【英文标题】:Should bash scripts called with --help argument return 0 or not-zero exit code? [closed] 【发布时间】:2018-05-28 11:30:16 【问题描述】:

编写一个 bash 脚本,在使用 --help 参数调用时显示使用信息,建议使用什么退出代码返回/退出脚本?

$ my_script --help; echo $?
Usage ...
0

$ my_script --help; echo $?
Usage ...
1

如果有不同的意见,其中一个或另一个选项的论据是什么?

类似的工具:grep(在 MacOS 上)、man 返回非零退出代码。 诸如bashshvim 之类的工具返回 0 作为退出代码。

【问题讨论】:

零,因为程序结束成功 grep 和 man 都为我返回 0 和 --help。 ping 没有--help 选项,所以它失败了。 “如果有不同的意见”……呃,你知道有,因为你刚才举了6个不同意见的例子。这让这个问题很明显离题了。 @Flimzy 可能不是那么“离题”。问题是编写 bash 代码的好/更好的做法是什么。 我认为将其重新措辞为“以非 0 状态退出 '--help' 的原因是什么?”将是主题。通过只关注一个选项,它不会使两者相互对抗,也不会要求“正确”的答案。然后通过学习输入,您可以决定在您的程序中做什么。但按照目前的措辞,它显然主要基于意见(征求反对意见和支持意见并不能解决这个问题)。 【参考方案1】:

输出应该转到stdout,并且脚本应该返回 0,除非出现 IO 错误。 (用户请求了帮助屏幕,而您已交付。操作成功。)

如果您输出相同的帮助屏幕作为对错误使用的响应,请将其输出到stderr 并失败(=以非零值退出)。 (用户试图做某事但他们做错了——操作失败了,你通过stderr给他们一个提示(因为在stdout,他们很可能期待别的东西)关于他们如何做对。)

我认为这些都是很好且合理的做法,我见过的大多数优秀的 CLI 工具都遵循它们。 (这包括我的 Linux Mint 的 grepmanping,需要注意的是 ping 抱怨没有帮助选项,但它与本建议的第二段一致。)

【讨论】:

【参考方案2】:

0是正确的返回码,因为命令运行成功,也就是返回码0的意思。

【讨论】:

以上是关于使用 --help 参数调用的 bash 脚本应该返回 0 还是非零退出代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 bash 脚本时使用文件名参数调用 Python 脚本

如何从 Mac 上的 bash 脚本调用 ./snowsql 文件?

带有命令行参数的 C++ 的 Makefile 和 Bash 脚本

Bash 脚本无法识别命令行参数? [复制]

sh Rails通过bash脚本调用参数调用的任务

bash脚本返回值应用