我有一个调用许多命令的 Bash shell 脚本。
如果任何命令返回非零值,我希望 shell 脚本自动退出并返回值 1。
如果不明确检查每个命令的结果,这可能吗?
例如,
dosomething1
if [[ $? -ne 0 ]]; then
exit 1
fi
dosomething2
if [[ $? -ne 0 ]]; then
exit 1
fi
原文由 Jin Kim 发布,翻译遵循 CC BY-SA 4.0 许可协议
要添加到已接受的答案:
请记住 set -e
有时是不够的,特别是如果您有管道。
例如,假设你有这个脚本
#!/bin/bash
set -e
./configure > configure.log
make
…按预期工作: configure
中的错误中止执行。
明天你做一个看似微不足道的改变:
#!/bin/bash
set -e
./configure | tee configure.log
make
…现在它不起作用。 此处 对此进行了解释,并提供了一种解决方法(仅限 Bash):
#!/bin/bash
设置-e
设置-o pipefail
./配置 |三通配置日志
制作
原文由 leonbloy 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.2k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答781 阅读✓ 已解决
2 回答3.2k 阅读
将此添加到脚本的开头:
如果一个简单的命令以非零退出值退出,这将导致 shell 立即退出。 A simple command is any command not part of an
if
,while
, oruntil
test, or part of an&&
or||
列表。有关更多详细信息,请参阅“set”内部命令的 bash 手册。
当中间出现问题并打破脚本其余部分的假设时,让脚本顽固地继续下去真的很烦人。我个人以
set -e
开始几乎所有可移植的 shell 脚本。如果我专门使用 bash ,我将从
这以类似的方式涵盖了更多错误处理。我认为这些是新 bash 程序的合理默认值。有关这些选项的作用的更多信息,请参阅 bash 手册。