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

问题描述 投票:0回答:2

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

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

  • 运行脚本。
  • 到达并运行有问题的命令。
  • 如果失败,请不要中断执行。仅对此命令执行此操作。
bash continuous-integration
2个回答
3
投票

我建议:

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

要么

your_command_which_would_fail || true

1
投票

标志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'
© www.soinside.com 2019 - 2024. All rights reserved.