什么是退出代码(exit code)
每个脚本、命令或者二进制文件都带有返回码退出。
我们可以在特殊变量 $? .返回代码是数字,并且限制在 0-255 之间,因为使用了无符号 8 位整数。
如果我们使用值 -1,它将返回 255.
每次执行都以退出代码终止,无论成功与否,带有错误消息或者静默。
例如:
$ date ; echo $? Sat Jan 18 08:06:07 IST 2020 0
如我们所见,退出代码为 0,因为该命令的执行没有问题。
现在,让我们试试这个:
$ wrngcmd ; echo $? -bash: wrngcmd: command not found 127
这是一个没有找到的命令,因为我们只是输入了一堆毫无意义的字符。
之路教程 https://onitr oad .com
保留的 Bash 退出代码
与表示命令成功的退出代码“0”类似,bash 为不同情况保留了一些退出代码。
因此,理想情况下,如果我们在脚本中使用 exit 命令并需要指定退出代码,请不要使用这些保留的退出代码,因为它们可能会产生冲突结果。
退出代码数字 | 含义 | 例子 | 注释 |
---|---|---|---|
1 | 捕获一般错误 | 让 "var1 = 1/0" | 杂项错误,如 "divide by zero" 和其他不允许的操作 |
2 | 滥用 shell 内置函数 | empty_function() {} | 缺少关键字或者命令 |
126 | 调用的命令无法执行 | /开发/空 | 权限问题或者命令不是可执行文件 |
127 | "找不到命令" | 非法命令 | $PATH 可能有问题或者打字错误 |
128 | 退出的无效参数 | 退出 3.14159 | exit 只接受 0 - 255 范围内的整数参数; (见第一个脚注) |
128 +n | 致命错误信号 "n" | kill -9 $PPID 脚本 | $? 返回 137 (128 + 9) |
130 | 由 Control-C 终止的脚本 | Ctrl-C | Control-C 是致命错误信号 2,(130 = 128 + 2,见上) |
255* | 退出状态超出范围 | 退出 -1 | exit 只接受 0 - 255 范围内的整数参数; 255 |
让我们通过一个例子来理解退出代码“128 +n”。
运行永无止境的循环,如下所示:
#!/bin/bash while true; do echo ${$} done
如果我们运行此脚本,它将无限期地打印相同的 PID,直到我们杀死它或者执行“CTRL+C”。
让我们尝试执行“CTRL+C”并查看退出代码是什么。
# sh test.sh .... 2582 2582 2582 2582 2582 2582 ^C onitroad$ echo $? 130
如我们所见,退出代码是“128+2”,例如:130。
同样,如果我们使用“kill -9”杀死脚本,退出代码应该是“128+9”,例如:137.
让我们看一个例子:
# sh test.sh .... 2582 2582 2582 ...
# kill -9 [pid_of_script]
.... 2602 2602 Killed: 9 onitroad$ echo $? 137
日期:2020-09-17 00:14:20 来源:oir作者:oir