为了账号安全,请及时绑定邮箱和手机立即绑定

重击忽略特定命令的错误

重击忽略特定命令的错误

翻过高山走不出你 2019-12-10 10:30:25
我正在使用以下选项set -o pipefailset -e在bash脚本中,由于错误而停止执行。我有大约100行脚本正在执行,并且我不想检查脚本中每一行的返回码。但是对于一个特定的命令,我想忽略该错误。我怎样才能做到这一点?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

解决方案:


particular_script || true

例:


$ cat /tmp/1.sh

particular_script()

{

    false

}


set -e


echo one

particular_script || true

echo two

particular_script

echo three


$ bash /tmp/1.sh

one

two

three 将永远不会打印。


另外,我想补充一点,当pipefail打开时,如果管道中的命令之一具有非零退出代码(pipefail关闭该命令必须是最后一个),shell认为整个管道具有非零退出代码就足够了。


$ set -o pipefail

$ false | true ; echo $?

1

$ set +o pipefail

$ false | true ; echo $?

0


查看完整回答
反对 回复 2019-12-10
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

不要停止并保存退出状态


万一您希望脚本在特定命令失败时不停止,并且还希望保存失败命令的错误代码,以防万一:


set -e

EXIT_CODE=0

command || EXIT_CODE=$?

echo $EXIT_CODE


查看完整回答
反对 回复 2019-12-10
?
DIEA

TA贡献1820条经验 获得超2个赞

更简洁地说:


! particular_script

从POSIX规范中set -e(重点是):


启用此选项时,如果简单命令由于“ Shell错误的后果”中列出的任何原因而失败,或者返回退出状态值> 0,并且在一段时间,直到或if关键字之后,则不属于复合列表的一部分,并且不是AND或OR列表的一部分,也不是前面带有!的管道。保留字,然后外壳应立即退出。


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 475 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信