在出错时自动退出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
来禁用此行为。
(*) 注意:
如果失败的命令是命令列表的一部分,紧接着一段时间或直到关键字,在if或elif保留字之后的测试的一部分,在&&或||中执行的任何命令的一部分,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