How to avoid a bash script from failing when -e option is set?
bash, scripting, shell
Solution
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 )
Problem
I have a bash script with `-e` option set, which fails the whole script on the very first error. In the script, I am trying to do an `ls` on a directory. But that path may or may not exist. If the path does not exist, the `ls` command fails, since the `-e` flag is set. Is there a way by which I can prevent the script from failing? As a side note, I have tried the trick to do an `set +e` and `set -e` before and after that command and it works. But I am looking for some better solution.