最近,我想知道如何在 中更改脚本的退出状态或结束状态bash
。例如,假设我们运行程序test.sh
,程序内部使用 退出exit 0
… 我想知道将此退出状态更改为 的正常程序是什么1
?我知道您可以使用,exit 1
但这是设置退出状态的实际标准吗?
答案1
脚本的退出状态是执行的最后一个命令的退出状态。例如,如果最后一个语句尝试使用 创建目录mkdir some/path
,并且命令失败,则脚本本身的退出代码将是失败的 的退出代码mkdir
。
如果您想设置不同的退出代码,您可以使用exit
内置函数:
exit: exit [n]
Exit the shell with a status of N. If N is omitted, the exit status
is that of the last command executed.
如果您的脚本检测到出现错误,则建议您使用非零代码退出。通常使用 1,这已经足够好了,直到您想向调用程序发出不同的信号,以便能够对不同类型的错误做出不同的响应。除非您有特定的想法,否则只需使用exit 1
。
答案2
非零退出表示错误。零表示成功。尝试删除不存在的文件虽然失败,但在大多数情况下与实际删除文件一样好,因此由您的脚本决定是否应将这些事情视为失败或成功。
那么你应该使用什么数字呢?在我使用 Unix 的 30 多年里,我从未见过标准。如果其他人正在使用你的脚本,为了清楚起见,重要的是你要么只使用一个失败的退出代码,要么定义该退出代码的含义。定义可以通过多种方式包含。一种方法是将退出代码与标准错误的可能原因列表一起回显,如下所示
echo -e "Return code Error: " $Error "\n Possible errors are\n" \
"1 = missing parameter\n" \
"2 = Could not do what you wanted \n" >&2
当然还有很多其他选择,比如用注释记录代码中的错误(最好把它放在脚本的前面,而不是分散在各处),或者像下面这样将脚本设为可选参数
$myscript -error [other parameters if any]
打印所有可能的错误。
我已使用其他脚本调用的脚本的错误代码作为返回信息:
0 表示成功,正数表示错误,负数表示无错误但需要采取特殊措施
如果直接运行被调用的脚本,那就不好了,因为它可能会让用户感到困惑,但被调用的脚本可以检查该情况。