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

P K*_*P K 4 linux bash exit exit-code

根据定义,退出代码 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
Run Code Online (Sandbox Code Playgroud)

Dar*_*all 7

Bash 文档中没有任何内容说明128所需的无效退出代码。

Bash 本身返回执行的最后一个命令的退出状态,除非发生语法错误,在这种情况下它以非零值退出。

最后一个命令是 bash 内置命令exit(来自手册页)

退出 [n]

导致 shell 以 n 状态退出。如果省略 n,则退出状态是执行的最后一个命令的状态。

检查WEXITSTATUS 的规范

出口状态(stat_val)

如果 WIFEXITED(stat_val) 的值非零,则此宏计算子进程传递给 _exit() 或 exit() 的状态参数的低 8 位,或子进程从 main 返回的值()。

所以出口被限制为8位整数(0 - 255),所以-1255。Exit 只理解一个整数参数而不是浮点数,所以它可能会踢出一个 default -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
Run Code Online (Sandbox Code Playgroud)