bash 脚本应该使用 --help 参数调用 return 0 还是非零退出代码?
Should bash scripts called with --help argument return 0 or not-zero exit code?
编写一个 bash 脚本,在使用 --help
参数调用时显示使用信息,建议 return/exit 脚本使用什么退出代码?
$ my_script --help; echo $?
Usage ...
0
或
$ my_script --help; echo $?
Usage ...
1
如果有不同意见,一个或另一个选项的论据是什么?
- 工具如:
grep
(在 MacOS 上),man
return 非零退出代码。
- 工具如:
bash
、sh
、vim
return 0 作为退出代码。
除非出现 IO 错误,否则输出应为 stdout
,脚本应为 return 0。 (用户请求帮助屏幕,您交付。操作成功。)
如果您输出相同的帮助屏幕作为对不正确使用的响应,则将其输出到 stderr
并失败(=以非零值退出)。
(用户试图做某事,但他们做错了——操作失败,你通过 stderr
给他们一个提示(因为在 stdout
,他们很可能期待其他事情)关于如何他们可能会做对。)
我认为这些是良好且合理的做法,我见过的大多数优秀的 CLI 工具都遵循这些做法。
(这包括我的 Linux Mint 的 grep
、man
和 ping
,需要注意的是 ping
抱怨没有帮助选项,但确实如此与此建议的第 2 段一致。)
0 是正确的 return 代码,因为命令运行成功,这就是 return 代码 0.
的含义
编写一个 bash 脚本,在使用 --help
参数调用时显示使用信息,建议 return/exit 脚本使用什么退出代码?
$ my_script --help; echo $?
Usage ...
0
或
$ my_script --help; echo $?
Usage ...
1
如果有不同意见,一个或另一个选项的论据是什么?
- 工具如:
grep
(在 MacOS 上),man
return 非零退出代码。 - 工具如:
bash
、sh
、vim
return 0 作为退出代码。
除非出现 IO 错误,否则输出应为 stdout
,脚本应为 return 0。 (用户请求帮助屏幕,您交付。操作成功。)
如果您输出相同的帮助屏幕作为对不正确使用的响应,则将其输出到 stderr
并失败(=以非零值退出)。
(用户试图做某事,但他们做错了——操作失败,你通过 stderr
给他们一个提示(因为在 stdout
,他们很可能期待其他事情)关于如何他们可能会做对。)
我认为这些是良好且合理的做法,我见过的大多数优秀的 CLI 工具都遵循这些做法。
(这包括我的 Linux Mint 的 grep
、man
和 ping
,需要注意的是 ping
抱怨没有帮助选项,但确实如此与此建议的第 2 段一致。)
0 是正确的 return 代码,因为命令运行成功,这就是 return 代码 0.
的含义