Exiting from a shell script when a failure occurs


While debugging an issue with one of my scripts, I wanted to abort execution and exit when a non-zero return code occurred. I recalled reading about a bash flag that provided this behaviour, and after a few minutes of reading through bash(1) I came across the following set option:

“-e Exit immediately if a simple command (see SHELL GRAMMAR above) exits with a non-zero status. 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 in an if statement, part of a && or|| list, or if the command’s return value is being inverted via !. A trap on ERR, if set, is executed before the shell exits.”

So given the following test script that calls a non-existent command /bin/bork:

$ cat test
/bin/bork echo “Made it after the bork”

We can see that a normal run completes to the end:

$ sh test
test: line 1: /bin/bork: No such file or directory Made it after the bork

But an invocation with the “-e” option exits when a non-zero return value occurs:

$ sh -e test
test: line 1: /bin/bork: No such file or directory

The bash manual page is full of super interesting stuff, and I just printed it out to learn more! Nice!

This article was posted by Matty on 2009-05-20 09:32:00 -0400 -0400