bash - 为什么回显$?返回与预期不同的值?

标签 bash error-handling compiler-errors echo exit

我知道 echo $? 返回前一个进程的退出状态。 在我的程序中,如果我的程序以 0 状态代码结束,我将得到 0。但是当程序以状态码-1结束时,echo $? 显示255。 StackOverflow 上有类似的问题,但没有解释为什么会这样。再加上其中一个答案通常表示高于 128 的值表示一些错误和负退出代码。例如,147 - 我们可以通过从 147 中减去 128 得到真正的退出代码,128 - 147 = -19,所以退出代码是 -19。 在我的电脑中,我发现 256 作为那个数字。例如 255 - 256 = -1,这是我的程序返回的。 为什么在不同的系统上这些数字会有所不同 128、256,以及为什么它们不能打印原始负代码而不是将这些数字添加到原始退出状态代码。

最佳答案

由于历史原因,退出代码被解释为无符号的一字节值。 “正常”错误代码是正数 (<127),而“异常”错误代码(例如,通过终止信号产生的错误代码)是负数 (>=128)。

尝试在 sleep 10 命令上按 Ctrl-C。退出代码为 130。

127 是“找不到命令”的结果。

明确地使用负错误代码确实不是推荐的做法。

有关更多信息,请查看 wait() 手册页(man 2 wait),特别是 WFEXITED() 和 friend .

WEXITSTATUS(status)

returns the exit status of the child. This consists of the least significant 8 bits of the status argument that the child specified in a call to exit(3) or _exit(2) or as the argument for a return statement in main(). This macro should only be employed if WIFEXITED returned true.

(强调)

关于bash - 为什么回显$?返回与预期不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50901459/

相关文章:

linux - 使用shell脚本删除文件夹内容

Swift 惯用的错误检查

vb.net - 如何为ForEach传递带有lambda表达式的System.Action参数?

linux - 如何在 BASH 中捕获 href 链接

linux - shell find 在搜索结果中不显示根目录

bash - 如何修改已将其回显到屏幕的行

asp.net - ASP.NET AJAX进行代码背后的函数调用错误

ruby - 救援与捕捉同时进行

typescript - 实现编译器不跟随的链

ios - 编译项目时出现 Xcode 错误