我一直在写一些shell脚本,如果有能力停止所述shell脚本的执行,如果任何命令失败,我会发现它很有用。请看下面的例子:
#!/bin/bash
cd some_dir
./configure --some-flags
make
make install
因此,在这种情况下,如果脚本不能更改到指定的目录,那么如果失败,它肯定不想在之后执行./configure。
现在我很清楚,我可以对每个命令进行if检查(我认为这是一个无望的解决方案),但是是否存在一个全局设置,以便在其中一个命令失败时使脚本退出?
使用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禁用此行为。
你可能还想使用全部或部分的-e -u -x和-o pipefail选项,如下所示:
set -euxo pipefail
-e在错误时退出,-u在未定义的变量时退出,-o(用于选项)pipefail在命令管道失败时退出。这里详细记录了一些陷阱和变通方法。
(*)注:
命令的一部分,如果失败的命令,则shell不退出
命令列表紧跟在while或until关键字之后,
部分测试后跟if或elif保留字,部分
在&&或||列表中执行的任何命令的
在最后的&&或||之后,管道中的任何命令
最后一个,或者命令的返回值与
!
(摘自man bash)