Вы можете «поймать» ошибку, используя ||
, и команда, которая должна выйти из состояния 0:
ls $PATH || echo "$PATH does not exist"
Поскольку сложная команда преуспевает, существует или нет $PATH
, set -e
не запускается, и ваш скрипт не выйдет.
Чтобы подавить ошибку беззвучно, вы можете использовать команду true
:
ls $PATH || true
Чтобы выполнить несколько команд, вы можете использовать одна из составных команд:
ls $PATH || { command1; command2; }
или
ls $PATH || ( command1; command2 )
Просто убедитесь, что ничего не происходит внутри любой из составных команд. Одним из преимуществ второго примера является то, что вы можете отключить режим немедленного выхода внутри подоболочки, не влияя на его статус в текущей оболочке:
ls $PATH || ( set +e; do-something-that-might-fail )