我的提示符(bash)配置为打印出最后一个命令的退出代码,如果它不成功(也就是零)。因此,我看到很多退出代码,即使程序似乎没有遇到任何问题。 有没有办法查找这些退出代码的含义?
我总是尝试手册页,信息页或“ - help”选项,但无济于事。
为了澄清,我问的是Linux附带的实用程序,例如cd
,ls
,du
,...
答案 0 :(得分:13)
除了'0'之外,程序的退出代码没有标准化的含义;其他任何事情都意味着出了问题'。严格来说,这仅适用于C和C ++ - exit(0);
或exit(EXIT_SUCCESS);
都会成功退出,但返回给操作系统的值可能会有所不同。
即使是零成功规则也有例外。显然,有粗心的程序没有返回定义的退出状态;最好避免这样的程序。即使出现问题,还有其他不那么粗心的程序总是返回0;通常最好避免使用它们。
但是,还有一些程序会将大量信息仔细编码到退出状态,并且只是获得非零退出状态并不意味着此类程序失败。当然,这些程序记录了退出状态的含义。
POSIX小心记录程序的退出状态。
程序的手册页应记录退出状态。在Unix上,如果没有这样的文档,那么假设没有成功,其他任何事情都是失败的。
请注意,如果bash
无法执行命令,它将返回程式化状态:
此外,如果程序因信号而死亡,bash
会通过将退出状态编码为:
128 + signal-number
因此,SIGHUP产生129,SIGILL产生132,SIGTERM产生143等等。但是,程序可以退出任何这些状态,并且意味着与bash
意味着不同的东西。也就是说,这是一个相对不寻常的程序,退出任何退出状态,所以你通常是安全的。
请注意,不同的操作系统有不同的约定:Unix提供8位状态,成功为零; Windows为退出状态值(16位或32位)提供了更大的范围;我相信VMS用零表示失败。
答案 1 :(得分:1)
手册页是本文档的常规位置。如果你在Debian,你甚至会被要求提交针对没有文档退出代码的实用程序的错误报告。
答案 2 :(得分:1)
高级Bash脚本编制指南还提供了具有特殊含义的退出代码。