我对这些Bash退出代码感到有点困惑。 例如:
#(444出口) 然后当我使用echo命令显示退出代码时:
#echo $? 这将导致它:188
它似乎是444-256的结果。我知道退出代码的范围是0-255。所以它们总计算为256个退出代码。
但是当我使用时:
(exit 555)
发生什么计算?这将返回43作为退出代码。
答案 0 :(得分:2)
您遇到了8位整数溢出的影响。在255之后(所有8位设置)变为0(没有设置位)。
所以你看到的计算是“退出代码模256”。
从Bash手册中强调我的:
退出状态
执行命令的退出状态是waitpid系统调用或等效函数返回的值。 退出状态介于0到255之间,但如下所述,shell可能会使用高于125的值。 shell builtins和复合命令的退出状态也仅限于此范围。 在某些情况下,shell将使用特殊值来指示特定的故障模式。
一旦信号发挥作用,最后一部分变得很重要,这可能会中断一个过程并提供退出代码......
...如果命令被信号n ...
终止,则为128 + n
...但是这是shell工作,而不是exit
命令(不允许这些值)。