bash - exit用法 - shell return exit




在出错时自动退出bash shell脚本 (5)

一个成语是:

cd some_dir && ./configure --some-flags && make && make install

我意识到可以变长,但对于更大的脚本,您可以将其分解为逻辑函数。

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

#!/bin/bash  

cd some_dir  

./configure --some-flags  

make  

make install

因此,在这种情况下,如果脚本无法更改为指定的目录,那么如果失败,它肯定不希望执行./configure。

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


pipefail一起使用它。

set -e
set -o pipefail

-e(errexit):在第一个错误时中止脚本,当命令以非零状态退出时(除非在until或while循环中,if-tests,list结构体)

-o pipefail:使管道返回管道中返回非零返回值的最后一个命令的退出状态。

第33章选项


作为第一行所接受的答案的替代方案:

#!/bin/bash -e

cd some_dir  

./configure --some-flags  

make  

make install

使用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来禁用此行为。

(*) 注意:

如果失败的命令是命令列表中紧接着一段时间直到关键字的一部分,那么shell将不会退出,在ifelif保留字之后的测试部分,是在&&||中执行的任何命令的一部分。 列表,除了最后的&&||之后的命令 ,管道中的任何命令但最后一个,或者命令的返回值与

(来自man bash


要在其中一个命令失败时立即退出脚本,请在开始处添加以下内容:

set -e

当一些不属于某个测试的命令(如if [ ... ]条件或&&构造中的命令)以非零退出代码退出时,这会导致脚本立即退出。







exit