В сценариях оболочки set -e
часто используется, чтобы сделать их более устойчивыми, останавливая сценарий, когда некоторые команды, выполняемые из сценария, завершаются с ненулевым кодом выхода.
Обычно легко указать, чтоВы не заботитесь о некоторых командах, выполняющихся успешно, добавляя || true
в конце.
Проблема возникает, когда вы на самом деле заботитесь о возвращаемом значении, но не хотите, чтобы скрипт останавливался нанулевой код возврата, например:
output=$(possibly-failing-command)
if [ 0 == $? -a -n "$output" ]; then
...
else
...
fi
Здесь мы хотим как проверить код выхода (таким образом, мы не можем использовать || true
внутри выражения подстановки команд), так и получить вывод.Тем не менее, если команда в подстановке команд завершается неудачно, весь сценарий останавливается из-за set -e
.
Есть ли чистый способ предотвратить остановку сценария здесь без сброса -e
и последующей его настройки?