On Monday, October 07, 2013 10:21:06 AM Chet Ramey wrote: > The subshell command is clearly part of the || compound command. The > subshell `knows' that it is part of || and set -e has no effect. This > example has been discussed before, on this list and the austin-group > Posix list, and the bash behavior is correct. > > Chet
Have you considered that adding proper exception handling might not be a large step? Bash just needs to expose fine-grained error information and provide a trigger for user-defined code to interpret it. function missingFile { echo 'Tried opening some non-existing file!' >&2; } function badCmd { echo 'Unknown command.' >&2; } function otherErr { printf 'Some unknown error was hit with code: %s\n' "$1" >&2; } typeset -A handlerMap=( [file_not_found]=missingFile [command_not_found]=badCmd # User maps any conditions Bash knows how to throw as needed. ) # If not ERR, an enhanced variant triggered on any update to BASH_ERR # Can be used in a manner similar to the Ksh KEYBD trap. trap '"${handlerMap[$BASH_ERR]:-otherErr "$BASH_ERR"}"' ERR # Bash sets BASH_ERR to "file_not_found" and triggers ERR. User-defined # code does the rest. exec <file_that_does_not_exist -- Dan Douglas