Вам необходимо завершить каждую команду, которая может завершиться с ошибкой ||
, и список команд или команд, имеющий значение 0. Использование ||
вызовет вашу команду, если выражение перед оператором не оценивается как 0. Ваша команда должна оценить до 0, чтобы не убить оболочку.
Пример:
set -e
false || true # silently ignore error
false || echo "Command failed, but exit status of echo is 0. Continuing..."
false || {
echo "Command failed. Continuing..."
# do something else
false && true # all commands in the list need to be true
}
false && true
не вызывает выхода, поскольку конечное выражение оценивается и оценивается как 0. Со страницы руководства bash для set -e
:
Выйти немедленно, если конвейер (который может состоять из одного
простая команда), команда subshell, заключенная в скобки, или одна из
команды, выполняемые как часть списка команд, заключенного в фигурные скобки
(см. ОБРАЗЕЦ ОБОЛОЧКИ выше) выходит с ненулевым статусом. Оболочка
не завершается, если сбойная команда является частью списка команд
сразу после ключевого слова или до, часть теста
после зарезервированных слов if или elif, часть любой выполненной команды
в && или || список, кроме команды, следующей за последним символом && или || ,
любая команда в конвейере, кроме последней, или если команда возвращается
значение инвертируется с! Ловушка ERR, если установлена, выполняется
до выхода оболочки. Этот параметр применяется к среде оболочки
и каждая оболочка в отдельности (см. КОМАНДНОЕ ИСПОЛНЕНИЕ
ОКРУЖАЮЩАЯ СРЕДА выше), и может привести к выходу подоболочек перед выполнением
все команды в подоболочке.
Только последняя команда, если она выполнена в цепочке ||
/ &&
, может вызвать выход.
Следующее выражение не будет выполнено по вышеуказанной причине.
true && false
но следующее не будет:
if true && false
then
true
fi
из-за true && false
является частью теста, следующего за if
.