bash中`set -e`的例外情况

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash中`set -e`的例外情况相关的知识,希望对你有一定的参考价值。

我有一个用于制作项目的bash脚本。我在脚本顶部有set -e,以便在任何组件出现故障时中断执行。

其中一个命令会失败,但它很自然会失败。我希望脚本的行为如下:

  • 运行脚本。
  • 到达并运行有问题的命令。
  • 如果失败,请不要中断执行。仅对此命令执行此操作。
答案

我建议:

set +e
# your command which would fail
set -e

要么

your_command_which_would_fail || true
另一答案

标志set -e有一堆豁免,在执行的命令失败后(exitcode≠0)它不会立即导致中止。其中包括@cyrus提出的连接(a || b和类似)。有关详细信息,请参阅man bash;它有点难找,也许这会有所帮助:

man bash | grep -B 20 -A 10000 'Exit.*immediately' | less

我的建议是把它放在if

if command
then
    : "worked nicely"
else
    : "failed, but we don't want to abort"
fi

或@ Cyrus的简短版本:

command || true  # do not abort in case of 'set -e'

以上是关于bash中`set -e`的例外情况的主要内容,如果未能解决你的问题,请参考以下文章

Bash script set help function

在 bash 中,是不是可以将多个数组放在引号内然后访问它们?

命令 cron_01_set_leader 输出:bash: /usr/local/bin/bundle: No such file or directory

sh Bash:设置-x,for,in,echo,do,done:Debug for Loop使用set xtrace

s5pv210启动debian出错提示bash: cannot set terminal process group (-1): Inappropriate ioctl for device

BASH贪吃蛇