退出代码128,是什么原因?

退出代码128,是什么原因?

根据定义,退出代码 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(但实际上也没有退出)。

相关内容