我对这些类型的Bash退出代码有点困惑。例如:
# (exit 444)然后当我使用echo命令显示退出代码:
# echo $?结果是:188
似乎是444-256的结果。我知道退出码范围是0-255。因此,它们将被计算为总共256个退出码。
但是当我使用:
(exit 555)
发生什么计算?返回43作为退出码。
您正在经历8位整数溢出的影响。255(所有8位设置)之后是0(没有设置)。
所以你看到的计算是"exit code modulo 256"
来自Bash手册,强调我的:
退出状态
已执行命令的退出状态是waitpid系统调用或等效函数返回的值。退出状态介于0和255之间,但是,正如下面所解释的,shell可能会特别使用高于125的值。shell内置命令和复合命令的退出状态也限制在这个范围内。在某些情况下,shell会使用特殊的值来表示特定的失效模式。
一旦信号起作用,最后一部分就变得重要了,它可能会中断进程并给出退出代码
…
如果命令以信号n结束,则128+n…
…但这是shell在工作,而不是exit
命令(它不允许这些值)。