【发布时间】:2010-12-30 02:40:24
【问题描述】:
在 shell 脚本中,set -e 通常用于在脚本执行的某些命令以非零退出代码退出时停止脚本,从而使它们更加健壮。
通常很容易通过在末尾添加|| true 来指定您不关心某些命令是否成功。
当您真正关心返回值,但不希望脚本在非零返回码上停止时,就会出现问题,例如:
output=$(possibly-failing-command)
if [ 0 == $? -a -n "$output" ]; then
...
else
...
fi
这里我们要检查退出代码(因此我们不能在命令替换表达式中使用|| true)并获取输出。但是,如果命令替换中的命令失败,整个脚本会因为set -e而停止。
是否有一种干净的方法可以防止脚本在此处停止而不取消设置 -e 并在之后将其设置回来?
【问题讨论】:
-
取消设置-e有什么问题?
标签: shell robustness