gpt4 book ai didi

linux - 出现错误 : set +e does not seem to do the job 时自动退出 bash shell 脚本

转载 作者:IT王子 更新时间:2023-10-29 00:54:45 27 4
gpt4 key购买 nike

虽然 20 年来我都知道 shell 脚本不关心错误,但我一直对这种默认情况下的粗心大意感到好笑。即使您明确要求他们不要吞下错误并遵循 crash early 原则,这仍然不会发生。

引用Automatic exit from bash shell script on error , 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 几乎在每一行的末尾。

最佳答案

shell 中的选项(与直觉相反)使用减号打开,使用加号关闭。

即便如此,set -e 选项仅在程序正确返回非零错误状态时才有效。

虽然 apt-get 手册说它应该这样做,但其他帖子表明它经常不这样做(参见 apt-get update exit status)。

验证 apt 命令运行后的返回状态(例如使用 echo $?)。如果它返回非零值,set -e 应该可以工作。

关于linux - 出现错误 : set +e does not seem to do the job 时自动退出 bash shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41572184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com