微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 错误地从bash shell脚本自动退出:set e似乎没有完成这项工作

虽然我知道20年来shell脚本并不关心错误,但我地对这种粗心大意感到好笑.即使你明确要求他们不要吞下错误并遵循崩溃早期原则仍然不会发生.

参考Automatic exit from bash shell script on error,设置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 @R_755_4045@ion... 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 @R_755_4045@ion... Done
E: Unable to locate package nonexisting2
set -e
+ set -e

如何确保我的脚本执行所有命令而不会出现错误或立即停止?
我不喜欢写||在几乎每一行的末尾都退出1.

解决方法:

shell中的选项(反直觉地)使用减号打开并使用加号关闭.

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐