我有一个调用许多命令的 Bash shell 脚本。
如果任何命令返回非零值,我希望 shell 脚本自动退出并返回值 1。
如果不明确检查每个命令的结果,这是否可能?
例如,
dosomething1
if [[ $? -ne 0 ]]; then
exit 1
fi
dosomething2
if [[ $? -ne 0 ]]; then
exit 1
fi
最佳答案
将此添加到脚本的开头:
set -e
如果一个简单的命令以非零退出值退出,这将导致 shell 立即退出。简单命令是任何不属于 if
、while
或 until
测试的命令,或不属于 &&
的任何命令> 或 ||
列表。
见 bash manual关于“set”内部命令了解更多详情。
当中间出现问题并打破脚本其余部分的假设时,让脚本顽固地继续下去真的很烦人。我个人用 set -e
启动几乎所有可移植的 shell 脚本。
如果我专门使用 bash,我将从
开始set -Eeuo pipefail
这涵盖了以类似方式进行的更多错误处理。我认为这些是新 bash 程序的合理默认值。有关这些选项的作用的更多信息,请参阅 bash 手册。
https://stackoverflow.com/questions/821396/