bash: Jots on exiting the script
Trapping
Call a function (byebye in this case) just before exiting a script:
trap byebye exit
Or a command:
trap 'echo "Farewell cruel world!"' exit
It’s possible to catch various signals with “trap” as well.
Quit on error
In short: Have a
set -e
at the beginning of the script. It’s a global on-off feature, so it can be cancelled temporarily with something like
set +e
[ ... something we don't care if it fails ... ]
set -e
From bash’ man page, under the “-e” flag:
Exit immediately if a pipeline (which may consist of a single simple command), a subshell command enclosed in parentheses, or one of the commands executed as part of a command list enclosed by braces (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 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 !. A trap on ERR, if set, is executed before the shell exits. This option applies to the shell environment and each subshell environment separately (see COMMAND EXECUTION ENVIRONMENT above), and may cause subshells to exit before executing all the commands in the subshell.
From own testing:
- Does quit if a function returns a non-zero value (as it says above)
- If “set -e” appears in a file containing functions, it’s applies to the script invoking the function file (-e is global)
- If an error occurs during a trap handler with set -e active, the trap script stops at that point (i.e. trap scripts are not exempt from set -e).