如何查找Linux命令行实用程序的退出代码的含义?

时间:2011-09-03 15:37:33

标签: bash

我的提示符(bash)配置为打印出最后一个命令的退出代码,如果它不成功(也就是零)。因此,我看到很多退出代码,即使程序似乎没有遇到任何问题。 有没有办法查找这些退出代码的含义?

我总是尝试手册页,信息页或“ - help”选项,但无济于事。

为了澄清,我问的是Linux附带的实用程序,例如cdlsdu,...

3 个答案:

答案 0 :(得分:13)

除了'0'之外,程序的退出代码没有标准化的含义;其他任何事情都意味着出了问题'。严格来说,这仅适用于C和C ++ - exit(0);exit(EXIT_SUCCESS);都会成功退出,但返回给操作系统的值可能会有所不同。

即使是零成功规则也有例外。显然,有粗心的程序没有返回定义的退出状态;最好避免这样的程序。即使出现问题,还有其他不那么粗心的程序总是返回0;通常最好避免使用它们。

但是,还有一些程序会将大量信息仔细编码到退出状态,并且只是获得非零退出状态并不意味着此类程序失败。当然,这些程序记录了退出状态的含义。

POSIX小心记录程序的退出状态。

程序的手册页应记录退出状态。在Unix上,如果没有这样的文档,那么假设没有成功,其他任何事情都是失败的。

请注意,如果bash无法执行命令,它将返回程式化状态:

  • 127如果文件不存在或无法找到
  • 126,如果您对文件没有执行权限

此外,如果程序因信号而死亡,bash会通过将退出状态编码为:

来告知您
  • 128 + signal-number

因此,SIGHUP产生129,SIGILL产生132,SIGTERM产生143等等。但是,程序可以退出任何这些状态,并且意味着与bash意味着不同的东西。也就是说,这是一个相对不寻常的程序,退出任何退出状态,所以你通常是安全的。

请注意,不同的操作系统有不同的约定:Unix提供8位状态,成功为零; Windows为退出状态值(16位或32位)提供了更大的范围;我相信VMS用零表示失败。

答案 1 :(得分:1)

手册页是本文档的常规位置。如果你在Debian,你甚至会被要求提交针对没有文档退出代码的实用程序的错误报告。

答案 2 :(得分:1)

高级Bash脚本编制指南还提供了具有特殊含义的退出代码。

http://tldp.org/LDP/abs/html/exitcodes.html#EXITCODESREF