在出错时自动退出bash shell脚本

我一直在编写一些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来禁用此行为。

(*) 注意:

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

(来自man bash


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

set -e

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


以下是如何做到这一点:

#!/bin/sh

abort()
{
    echo >&2 '
***************
*** ABORTED ***
***************
'
    echo "An error occurred. Exiting..." >&2
    exit 1
}

trap 'abort' 0

set -e

# Add your script below....
# If an error occurs, the abort() function will be called.
#----------------------------------------------------------
# ===> Your script goes here
# Done!
trap : 0

echo >&2 '
************
*** DONE *** 
************
'
链接地址: http://www.djcxy.com/p/17505.html

上一篇: Automatic exit from bash shell script on error

下一篇: Getting ssh to execute a command in the background on target machine