列出所有系统退出状态代码及其描述
Listing all system exit status codes with descriptions
我知道 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
.
您显示的列表确实是最接近 "standardization" 的东西,但坦率地说,它看起来比实际更合法。据我所知,几乎没有人关注这些家伙,而是每个人都说出了自己的退出状态:
执行test1.sh
#!/bin/bash
a=10 ; [ "$a" -eq 9 ] && echo "Cool!" || exit 200
输出:
:~$ test1.sh
:~$ echo $?
200
退出状态是一个数值,由程序return发送给调用程序或shell。在 C 程序中,这由 main()
函数的 return 值或您赋予 exit(3)
的值表示。数字中唯一重要的部分是最低有效的 8 位,这意味着只有从 0
到 255
.
的值
Code Description
0 success
1-255 failure (in general)
126 the requested command (file) can't be executed (but was found)
127 command (file) not found
128 according to ABS it's used to report an invalid argument to the exit
builtin, but I wasn't able to verify that in the source code of Bash
(see code 255)
128 + N the shell was terminated by the signal N (also used like this by
various other programs)
255 wrong argument to the exit builtin (see code 128)
较低的代码 0
到 125
未保留,可用于程序想要报告的任何内容。值为 0 表示成功终止,非 0 值表示不成功终止。此行为 (== 0, != 0)
也是 Bash 在某些代码流控制语句(如 if
或 while
.
中的反应
以上摘自Exit Status section from Bash Hackers Wiki。
不可能有一个完整的列表,因为命令退出状态的含义本质上是特定于命令的。对于给定的命令,您通常可以在相应命令的手册页和信息文档中获得相关信息。
如
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”,我可以想象),但除非一个命令想要符合这些约定之一(并且周围可能存在多个相互冲突的约定),命令的作者完全可以自由决定他们希望退出状态代码的含义。
有一个重要的例外:所有 UNIX 命令都应遵守这一宽松规则 才能成为好公民并在命令行上提供有意义的可组合性(例如使用管道):
0
表示 'success' 或 "true"/"truthy"
- non-
0
表示(在非常广泛的意义上)'failure' or 'non-success' or "false"/"falsy"
如您所见,这仍然留下了很大的解释空间,这是完全有意为之的,因为这些含义必须特定于各个命令的上下文。 (考虑例如 false
命令,它的目的是 "fail",因此总是 return 是一个非 0
退出代码。)
您找到的 list 描述了系统调用的 return 代码。系统调用是指程序向内核发出请求(进入)并且与命令调用不同,因此这些 return 代码与命令退出代码(不一定)不同。
我知道 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
.
您显示的列表确实是最接近 "standardization" 的东西,但坦率地说,它看起来比实际更合法。据我所知,几乎没有人关注这些家伙,而是每个人都说出了自己的退出状态:
执行test1.sh
#!/bin/bash
a=10 ; [ "$a" -eq 9 ] && echo "Cool!" || exit 200
输出:
:~$ test1.sh
:~$ echo $?
200
退出状态是一个数值,由程序return发送给调用程序或shell。在 C 程序中,这由 main()
函数的 return 值或您赋予 exit(3)
的值表示。数字中唯一重要的部分是最低有效的 8 位,这意味着只有从 0
到 255
.
Code Description
0 success
1-255 failure (in general)
126 the requested command (file) can't be executed (but was found)
127 command (file) not found
128 according to ABS it's used to report an invalid argument to the exit
builtin, but I wasn't able to verify that in the source code of Bash
(see code 255)
128 + N the shell was terminated by the signal N (also used like this by
various other programs)
255 wrong argument to the exit builtin (see code 128)
较低的代码 0
到 125
未保留,可用于程序想要报告的任何内容。值为 0 表示成功终止,非 0 值表示不成功终止。此行为 (== 0, != 0)
也是 Bash 在某些代码流控制语句(如 if
或 while
.
以上摘自Exit Status section from Bash Hackers Wiki。
不可能有一个完整的列表,因为命令退出状态的含义本质上是特定于命令的。对于给定的命令,您通常可以在相应命令的手册页和信息文档中获得相关信息。
如
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”,我可以想象),但除非一个命令想要符合这些约定之一(并且周围可能存在多个相互冲突的约定),命令的作者完全可以自由决定他们希望退出状态代码的含义。
有一个重要的例外:所有 UNIX 命令都应遵守这一宽松规则 才能成为好公民并在命令行上提供有意义的可组合性(例如使用管道):
0
表示 'success' 或 "true"/"truthy"- non-
0
表示(在非常广泛的意义上)'failure' or 'non-success' or "false"/"falsy"
如您所见,这仍然留下了很大的解释空间,这是完全有意为之的,因为这些含义必须特定于各个命令的上下文。 (考虑例如 false
命令,它的目的是 "fail",因此总是 return 是一个非 0
退出代码。)
您找到的 list 描述了系统调用的 return 代码。系统调用是指程序向内核发出请求(进入)并且与命令调用不同,因此这些 return 代码与命令退出代码(不一定)不同。