How to avoid a bash script from failing when -e option is set?

You can “catch” the error using || and a command guaranteed to exit with 0 status:

ls $PATH || echo "$PATH does not exist"

Since the compound command succeeds whether or not $PATH exists, set -e is not triggered and your script will not exit.

To suppress the error silently, you can use the true command:

ls $PATH || true

To execute multiple commands, you can use one of the compound commands:

ls $PATH || { command1; command2; }

or

ls $PATH || ( command1; command2 )

Just be sure nothing fails inside either compound command, either. One benefit of the second example is that you can turn off immediate-exit mode inside the subshell without affecting its status in the current shell:

ls $PATH || ( set +e; do-something-that-might-fail )

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)