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