小编典典

错误时自动退出 Bash shell 脚本

all

我一直在编写一些 shell 脚本,如果任何命令失败时能够停止执行所述 shell 脚本,我会发现它很有用。请参阅下面的示例:

#!/bin/bash

cd some_dir

./configure --some-flags

make

make install

所以在这种情况下,如果脚本不能更改到指定的目录,那么如果它失败了,它肯定不想在之后执行 ./configure 。

现在我很清楚我可以对每个命令进行 if 检查(我认为这是一个没有希望的解决方案),但是如果其中一个命令失败,是否有一个全局设置可以使脚本退出?


阅读 181

收藏
2022-03-03

共1个答案

小编典典

使用set -e内置:

#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately

-e或者,您可以在命令行上传递:

bash -e my_script.sh

您也可以使用 禁用 此行为set +e

您可能还想使用全部或部分 the-e -u -x-o pipefail选项,如下所示:

set -euxo pipefail

-e出错时退出,-u未定义变量出错,-o (for option) pipefail命令管道失败时退出。一些陷阱和变通方法在此处得到了很好的记录。

(*) 笔记:

如果失败的命令是紧跟在 while*until 关键字之后的命令列表的一部分、位于 if
elif保留字之后的测试的一部分、在 & &|| 中执行的任何命令的一部分,则shell 不会 退出 列出除了最后的
& &||之后的命令 , 管道中除最后一个以外的任何命令,或者命令的返回值是否与 !
***


(来自man bash

2022-03-03