linux - 列出所有系统退出状态代码及其描述

标签 linux bash shell unix exit

我知道 shell 中的 $? 保存最后执行的程序 exit status

例如,当我运行以下命令时,我看到不同情况下的不同状态。

test$ hello
-bash: hello: command not found
test$ echo $?
127
test$ expr 1 / 0
expr: division by zero
test$ echo $?
2

我想知道系统或互联网中是否有任何通用的退出状态列表,我可以在其中获取所有退出状态及其描述。我找到了一个列表 here ,但缺少一些代码,例如 status code 127

最佳答案

不可能有一个完整的列表,因为命令退出状态的含义本质上是特定于命令的。对于给定命令,您通常可以在相应命令的手册页和信息文档中获得相关信息。

如果是

test$ hello
-bash: hello: command not found
test$ echo $?
127

退出代码 127 来自 bash,因为找不到请求的命令本身。

如果是

test$ expr 1 / 0
expr: division by zero
test$ echo $?
2

退出代码 2 来自 expr

这些命令中的一些可能是标准化的,或者至少是针对几个命令或一组命令进行协调的(例如“sh-compatible shells”,我可以想象),但除非一个命令想要符合对于这些约定之一(并且周围可能存在多个相互冲突的约定),命令的作者完全可以自由决定他们希望退出状态代码的含义。

有一个重要的异常(exception):所有 UNIX 命令都应遵守这一松散规则才能成为好公民并在命令行上提供有意义的可组合性(例如使用管道):

  • 0 表示“成功”或“真实”/“真实”
  • non-0 表示(在非常广泛的意义上)“失败”或“不成功”或“错误”/“虚假”

如您所见,这仍然留有很大的解释空间,这是完全有意为之的,因为这些含义必须特定于各个命令的上下文。 (考虑例如 false 命令,它的目的是“失败”,因此总是返回非 0 退出代码。)

list你发现描述了系统调用的返回码。系统调用是指程序向内核发出请求(输入),与命令调用不同,因此这些返回码(不一定)与命令退出码相同。

关于linux - 列出所有系统退出状态代码及其描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42872399/

相关文章:

linux - 使用 "git revert"取消添加一行的更改?

linux - 使用编程方式确定当前操作系统

linux - 将文件名前缀作为输入传递给程序

bash - 为什么 "set -v"似乎不能在 bash 的子 shell 中工作?

linux - 在 shell 中以其他用户身份运行时无法初始化变量

bash - 无法让 "=~"工作。继续获取 "[: =~: binary operator expected"

linux - 如何使用 sed\awk 从文件中删除行?

linux - 测试命令和重定向 bash

bash - Cshell 中的反向增量搜索

python - 在脚本上将 nohup 重定向到标准输出