我知道 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/