设置退出状态代码的最佳实践
Best practices on setting exit status codes
在实现我自己的脚本时,针对不同的失败场景使用不同的退出代码退出是否是最佳做法?或者我应该 return 退出代码 1 表示失败,退出代码 0 表示成功,在 stderr 上提供原因?
向 stderr 提供描述性错误消息对于交互式用户来说很好,但如果您希望您的脚本被其他人使用 scripts/programs,您应该为不同的失败设置不同的错误代码,因此调用脚本可以就如何处理故障做出明智的决定。
如果调用程序不希望以不同方式处理不同的失败,它总是可以根据 > 0
检查 return 代码 - 但不要假设是这种情况。
有一些建议,参见 wikipedia,但不规范,除了 0 iff success 之一:
http://en.wikipedia.org/wiki/Exit_status#POSIX
*在 Unix 和其他 POSIX-compatible 系统中,wait 系统调用设置一个 int 类型的状态值,打包为一个位域,其中包含各种类型的 child 终止信息。如果 child 因退出而终止(由 WIFEXITED 宏确定;通常的替代方法是它死于未捕获的信号),SUS 指定退出状态的 low-order 8 位可以从中检索wait.h;[6][7]中使用WEXITSTATUS宏的status值当使用POSIXwaitid系统调用时(加上POSIX-2001),status的范围是no不再限制,可以在完整的整数范围内。
POSIX-compatible 系统通常使用零表示成功,非零表示错误。[8]关于各种错误代码的相对含义,已经制定了一些约定;例如,GNU 建议为严重错误保留设置高位的代码,[3] 并且 FreeBSD 记录了一组广泛的首选解释。 [9] sysexits.h 中定义了 15 个状态代码 64 到 78 的含义。这些在历史上源自 sendmail 和其他消息传输代理,但后来在许多其他程序中得到使用。[10]*
在实现我自己的脚本时,针对不同的失败场景使用不同的退出代码退出是否是最佳做法?或者我应该 return 退出代码 1 表示失败,退出代码 0 表示成功,在 stderr 上提供原因?
向 stderr 提供描述性错误消息对于交互式用户来说很好,但如果您希望您的脚本被其他人使用 scripts/programs,您应该为不同的失败设置不同的错误代码,因此调用脚本可以就如何处理故障做出明智的决定。
如果调用程序不希望以不同方式处理不同的失败,它总是可以根据 > 0
检查 return 代码 - 但不要假设是这种情况。
有一些建议,参见 wikipedia,但不规范,除了 0 iff success 之一:
http://en.wikipedia.org/wiki/Exit_status#POSIX
*在 Unix 和其他 POSIX-compatible 系统中,wait 系统调用设置一个 int 类型的状态值,打包为一个位域,其中包含各种类型的 child 终止信息。如果 child 因退出而终止(由 WIFEXITED 宏确定;通常的替代方法是它死于未捕获的信号),SUS 指定退出状态的 low-order 8 位可以从中检索wait.h;[6][7]中使用WEXITSTATUS宏的status值当使用POSIXwaitid系统调用时(加上POSIX-2001),status的范围是no不再限制,可以在完整的整数范围内。
POSIX-compatible 系统通常使用零表示成功,非零表示错误。[8]关于各种错误代码的相对含义,已经制定了一些约定;例如,GNU 建议为严重错误保留设置高位的代码,[3] 并且 FreeBSD 记录了一组广泛的首选解释。 [9] sysexits.h 中定义了 15 个状态代码 64 到 78 的含义。这些在历史上源自 sendmail 和其他消息传输代理,但后来在许多其他程序中得到使用。[10]*