使用 --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
返回非零退出代码。
诸如bash
、sh
、vim
之类的工具返回 0 作为退出代码。
【问题讨论】:
零,因为程序结束成功 grep 和 man 都为我返回 0 和--help
。 ping 没有--help
选项,所以它失败了。
“如果有不同的意见”……呃,你知道有,因为你刚才举了6个不同意见的例子。这让这个问题很明显离题了。
@Flimzy 可能不是那么“离题”。问题是编写 bash 代码的好/更好的做法是什么。
我认为将其重新措辞为“以非 0 状态退出 '--help' 的原因是什么?”将是主题。通过只关注一个选项,它不会使两者相互对抗,也不会要求“正确”的答案。然后通过学习输入,您可以决定在您的程序中做什么。但按照目前的措辞,它显然主要基于意见(征求反对意见和支持意见并不能解决这个问题)。
【参考方案1】:
输出应该转到stdout
,并且脚本应该返回 0,除非出现 IO 错误。 (用户请求了帮助屏幕,而您已交付。操作成功。)
如果您输出相同的帮助屏幕作为对错误使用的响应,请将其输出到stderr
并失败(=以非零值退出)。
(用户试图做某事但他们做错了——操作失败了,你通过stderr
给他们一个提示(因为在stdout
,他们很可能期待别的东西)关于他们如何做对。)
我认为这些都是很好且合理的做法,我见过的大多数优秀的 CLI 工具都遵循它们。
(这包括我的 Linux Mint 的 grep
、man
和 ping
,需要注意的是 ping
抱怨没有帮助选项,但它与本建议的第二段一致。)
【讨论】:
【参考方案2】:0是正确的返回码,因为命令运行成功,也就是返回码0的意思。
【讨论】:
以上是关于使用 --help 参数调用的 bash 脚本应该返回 0 还是非零退出代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 bash 脚本时使用文件名参数调用 Python 脚本
如何从 Mac 上的 bash 脚本调用 ./snowsql 文件?