Automatic exit from bash shell script on error
I've been writing some shell script and I would find it useful if there was the ability to halt the execution of said shell script if any of the commands failed. See below for an example:
#!/bin/bash  
cd some_dir  
./configure --some-flags  
make  
make install
So in this case if the script can't change to the indicated directory then it would certainly not want to do a ./configure afterwards if it fails.
Now I'm well aware that I could have an if check for each command (which I think is a hopeless solution), but is there a global setting to make the script exit if one of the commands fails?
 Use the set -e builtin:  
#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
 Alternatively, you can pass -e on the command line:  
bash -e my_script.sh
 You can also disable this behavior with set +e .  
(*) Note:
The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test following the if or elif reserved words, part of any command executed in a && or || list except the command following the final && or || , any command in a pipeline but the last, or if the command's return value is being inverted with !
 (from man bash )  
To exit the script as soon as one of the commands failed, add this at the beginning:
set -e
 This causes the script to exit immediately when some command that is not part of some test (like in a if [ ... ] condition or a && construct) exits with a non-zero exit code.  
以下是如何做到这一点:
#!/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 *** 
************
'
上一篇: 如何检查在Cygwin,Mac或Linux上运行?
下一篇: 在出错时自动退出bash shell脚本
