linux - 如果任何命令返回非零值,则中止 shell 脚本

我有一个调用许多命令的 Bash shell 脚本。

如果任何命令返回非零值,我希望 shell 脚本自动退出并返回值 1。

如果不明确检查每个命令的结果,这是否可能?

例如,

dosomething1
if [[ $? -ne 0 ]]; then
    exit 1
fi

dosomething2
if [[ $? -ne 0 ]]; then
    exit 1
fi

最佳答案

将此添加到脚本的开头:

set -e

如果一个简单的命令以非零退出值退出,这将导致 shell 立即退出。简单命令是任何不属于 ifwhileuntil 测试的命令,或不属于 && 的任何命令> 或 || 列表。

见 bash manual关于“set”内部命令了解更多详情。

当中间出现问题并打破脚本其余部分的假设时,让脚本顽固地继续下去真的很烦人。我个人用 set -e 启动几乎所有可移植的 shell 脚本。

如果我专门使用 bash,我将从

开始
set -Eeuo pipefail

这涵盖了以类似方式进行的更多错误处理。我认为这些是新 bash 程序的合理默认值。有关这些选项的作用的更多信息,请参阅 bash 手册。

https://stackoverflow.com/questions/821396/

相关文章:

python - Python 是强类型的吗?

python - Python进程使用的总内存?

linux - 在shell中获取程序执行时间

python - 在 Python 中以 YYYY-MM-DD 获取今天的日期?

linux - 使用sudo时如何保留环境变量

python - Django:显示选择值

linux - 递归查找具有特定扩展名的文件

python - Python 和 IPython 有什么区别?

linux - 如何使用自定义分隔符将多行文件名合并为一个?

linux - chmod 777 到一个文件夹和所有内容