2011-09-03 46 views
14

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

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

要澄清,我问来与Linux的公用事业,如cdlsdu ...

+0

阅读:http://stackoverflow.com/questions/1101957/are-there-any-standard-exit-status-codes-in-linux 或浏览到/usr/include/sysexits.h – Icarus

+0

在手册页他们被称为“退出状态”。你提到'ls':如果我输入'man ls',然后执行搜索输入'/退出状态'我被带到相关段落。 – etuardu

+4

对于那些被称为“脱离主题”的人来说,这是关于在shell中编程以及退出状态的含义以及如何对它们进行编程。因此,它完全是针对SO的话题。如果你想把它作为1101957的副本来结束,我会对你有些同情;这些问题涵盖了大致相同的基础(但是当我检查时,3个关闭都是无关紧要的 - 并且错误地是如此IMNSHO)。 –

回答

1

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

13

没有为超越“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位状态,成功为0; Windows为退出状态值(16位或32位)提供了一个更大的范围;我相信VMS使用零表示失败。

+0

你可以命名一个没有退出状态的程序吗?什么会'echo $?'报告比? AFAIK,每个程序都有一个隐式返回值。我同意没有标准化的部分。 –

+0

我知道一些程序不能提供可靠的退出状态 - 即使出现错误,“总是0”的变化多于“与成功或失败无关的一些随机(通常为非零)值”。所述程序倾向于是本地的,定制的程序而不是众所周知的已发布程序;当程序变得众所周知时,退出状态等事情会得到清理。 –