虽然我知道20年来shell脚本不关心错误,但我仍然对这种默认的粗心大意感到惊讶。即使你明确要求它们不要吞噬错误并遵循“尽早崩溃”原则,事情仍然没有发生。
参考自动退出bash shell脚本出现错误,set +e
似乎无法胜任。以下是一个简短的示例:
#!/bin/bash -vx
set +e
apt-get install nonexisting1
apt-get install nonexisting2
set -e
输出:
#!/bin/bash -vx
set +e
+ set +e
apt-get install nonexisting1
+ apt-get install nonexisting1
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nonexisting1 <--- first error, now stop!
apt-get install nonexisting2 <--- why do we continue here?
+ apt-get install nonexisting2
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nonexisting2
set -e
+ set -e
如何确保我的脚本能够无错误地执行所有命令或立即停止? 我不喜欢在几乎每一行的末尾写上
|| exit 1
。
set +e
关闭该选项。 - Benjamin W.