Automatic exit from Bash shell script on error

bash, error-handling, exit, shell

Solution

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`.

You may also want to employ all or some of the the `-e` `-u` `-x` and `-o pipefail` options like so:

set -euxo pipefail

`-e` exits on error, `-u` errors on undefined variables, `-x` prints commands before execution, and `-o (for option) pipefail` exits on command pipe failures. Some gotchas and workarounds are documented well here.

(*) 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`)

Problem

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?

Original source

Related problems