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 中,是不是可以将多个数组放在引号内然后访问它们?
命令 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