根据定义,退出代码 128 表示“无效的退出参数”。但如果参数无效(例如浮点数),我总是得到 255(退出状态超出范围)。
这是我的 Linux 发行版上的专有实现吗?
# exit 1.234
exit
bash: exit: 1.234: numeric argument required
$ echo $?
255 //this should be 128?
# exit -1
exit
$ echo $?
255 //this is okay
答案1
里面什么也没有Bash 文档这说明128
所需的退出代码无效。
Bash 本身会返回最后执行的命令的退出状态,除非发生语法错误,在这种情况下它会以非零值退出。
最后一个命令是 bash 内置命令exit
(来自手册页)
退出 [n]
使 shell 以状态 n 退出。如果省略 n,则退出状态为最后执行的命令的状态。
已检查规格对于 WEXITSTATUS。
WEXITSTATUS(stat_val)
如果 WIFEXITED(stat_val) 的值不为零,则此宏的计算结果为低8位子进程传递给 _exit() 或 exit() 的状态参数,或者子进程从 main() 返回的值。
因此 exit 被限制为 8 位整数( 0 - 255 ),所以-1
会是255
。Exit 只理解整数参数,而不是浮点数,因此它可能会踢出默认的-1
。
bash$ echo $BASH_VERSION
4.1.10(4)-release
bash$ exit foo
exit
bash: exit: foo: numeric argument required
$ echo $?
255
bash$ exit 2
exit
$ echo $?
2
bash$ exit -2
exit
$ echo $?
254
答案2
这取决于你的 shell 版本。http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08 或者http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#exit不要确认你的印象,128 是某种特殊的退出代码。
对于exit 3.45
我的版本,ksh 和 zsh 返回 3,tcsh 返回 1(实际上并没有退出),而 ash 返回 2(但实际上也没有退出)。