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

chr*_*hrm 14 bash

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

我总是尝试手册页,信息页面或" - help"选项,但无济于事.

为了澄清,我问来与Linux的公用事业,如cd,ls,du,...

Jon*_*ler 14

超过0的程序的退出代码没有标准化的含义; 其他任何事情都意味着出了问题'.严格来说,这仅适用于C和C++ - exit(0);或者exit(EXIT_SUCCESS);两者都成功退出,但返回O/S的值可能不同.

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

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

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

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

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

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

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

  • 128 + signal-number

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

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


tri*_*eee 1

手册页是此文档的常规位置。如果您使用的是 Debian,您甚至需要针对具有未记录的退出代码的实用程序提交错误报告。