当我实现自己的脚本时,为不同的失败场景使用不同的退出代码是最佳实践吗?还是只需返回退出代码1表示失败,0表示成功,并在stderr中提供原因即可?
在交互用户方面,向stderr提供描述性错误消息是可以的,但如果您希望您的脚本被其他脚本/程序使用,您应该为不同的故障设置独特的错误代码,以便调用脚本可以根据情况做出明智的决策。
如果调用程序不想对不同的失败进行不同的处理,它始终可以检查返回代码是否为> 0 ,但不要假设这就是情况。
有一些建议,可以参考维基百科,但不是规范,除了0表示成功之外:
http://en.wikipedia.org/wiki/Exit_status#POSIX
*在Unix和其他兼容POSIX的系统中,wait系统调用设置一个int类型的状态值,打包成一个位域,包含各种类型的子进程终止信息。如果子进程通过退出来终止(由WIFEXITED宏确定;通常的替代方法是子进程死于未捕获的信号),SUS指定可以使用wait.h中的WEXITSTATUS宏从状态值中检索低8位的退出状态;[6] [7]当使用POSIX waitid系统调用(添加到POSIX-2001中)时,状态的范围不再受限制,可以处于完整的整数范围内。
兼容POSIX的系统通常使用零表示成功,非零表示错误。[8]已经发展出一些关于各种错误代码相对含义的约定;例如GNU推荐使用高位设置的代码保留给严重错误,[3]而FreeBSD已经记录了一套广泛接受的解释。[9]15个状态代码64到78的含义在sysexits.h中定义。这些历史上源自sendmail和其他消息传输代理,但现在在许多其他程序中也得到了应用。[10]*