Bash忽略特定命令的错误

我正在使用以下选项

set -o pipefail set -e 

在bash脚本中停止执行错误。 我有100个脚本执行,我不想检查脚本的返回码。 但是对于一个特定的脚本,我想忽略这个错误。 我怎样才能做到这一点 ?

解决scheme:

 particular_script || true 

例:

 $ cat /tmp/1.sh particular_script() { false } set -e echo ein particular_script || true echo zwei particular_script echo drei $ bash /tmp/1.sh ein zwei 

drei将永远不会被打印。

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

 $ set -o pipefail $ false | true ; echo $? 1 $ set +o pipefail $ false | true ; echo $? 0 

只需添加|| true 在想要忽略错误的命令之后是|| true

更简洁:

 ! particular_script 

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

如果此选项处于打开状态,如果某个简单命令由于Shell错误后果中列出的任何原因而失败,或者返回的退出状态值大于0,并且在一段时间之后不是复合列表的一部分,则直到或关键字和不是“或”或“或”列表的一部分,也不是“!”之前的pipe道 保留字 ,那么shell应该立即退出。

也可以使用noop :而不是“无效”。 你会保存几个字母。 🙂

 #!/usr/bin/env bash set -e man nonexistentghing || : echo "It's ok.." 

以防万一,如果你想让你的脚本在特定的命令失败时不会停止,并且你还想保存失败命令的错误代码:

 set -e; command || EXIT_CODE=$? && true ; echo $EXIT_CODE