Bash pipefail: вернуть ошибку из команды внутри конвейера

Категория: Bash · Язык: Bash · Обновлено:

По умолчанию статус pipeline равен статусу последней команды, поэтому ошибка в начале может потеряться. Включите set -o pipefail, чтобы конвейер сообщал о неудаче любой команды. ????? ??????????? ?????????? ???????? ?????? ??????? ? ????????? ?????? ? ??????? ?????.

Рабочий пример

Bash
set -o pipefail
set +e
printf '%s\\n' \"value\" | grep -q missing | wc -l >/dev/null
status=$?
set -e
printf 'pipeline_status=%s\\n' \"$status\"
test \"$status\" -ne 0

pipefail возвращает статус самой правой команды в pipeline, завершившейся ошибкой. В скриптах его обычно включают рядом с set -euo pipefail, чтобы не пропустить сбой загрузки или фильтрации.

Частый вопрос

Чем pipefail отличается от set -e?

pipefail меняет статус конвейера, а set -e завершает скрипт при необработанной ошибке. Для надёжности часто нужны оба, а исключения обрабатывают явно.