Let me guess, there is set -e
(or it’s long form set -o errexit
) option in your .bashrc
(.bash_profile
).
-e
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.
— bash(1)
This option is very useful for some scripts – it allows to avoid numerous || exit 1
, e. g. instead of
cd /var/ || exit 1
tar -cvf myarchive.tar "$SOMEDIR" || exit 1
rm -r "$SOMEDIR"
you can write
set -e
cd /var/
tar -cvf myarchive.tar "$SOMEDIR"
rm -r "$SOMEDIR"
But of course there is no any reason to set it for interactive bash session.