Шпаргалка: проверять статусы всех звеньев pipeline
Разберите статус последней команды, pipefail и массив PIPESTATUS в Bash. Сохраняйте результат сразу и не смешивайте ошибку обработки с пустой выборкой.
Когда открыть эту шпаргалку
Pipeline может напечатать правдоподобный результат, даже если первое звено завершилось ошибкой. По умолчанию статус определяется последней командой. Для диагностики нужны либо общая политика pipefail, либо статусы отдельных звеньев.
Выбор команды
Проверяйте статусы сразу после выполнения: даже простая команда присваивания или печати обновляет данные о последнем pipeline.
| Что выяснить | Команда или выражение | Как читать результат |
|---|---|---|
| Статус последней команды | $? | Значение нужно сохранить до следующей команды. |
| Включить сводку ошибок | set -o pipefail | Ненулевой статус последнего справа ошибочного звена; не статус первого сбоя по времени. |
| Все звенья в Bash | "${PIPESTATUS[@]}" | Массив относится к последнему foreground pipeline. |
| Сохранить массив | codes=("${PIPESTATUS[@]}") | После присваивания читайте codes, а не уже обновлённый PIPESTATUS. |
| Ограничить изменение shell | ( set -o pipefail; false | true; printf '%s\n' "$?" ) | Настройка остаётся внутри subshell. |
Короткая последовательность
Пример намеренно объединяет неуспешную и успешную встроенные команды. Он не работает с файлами и показывает оба индивидуальных статуса.
false | true
codes=("${PIPESTATUS[@]}")
printf 'first=%s second=%s\n' "${codes[0]}" "${codes[1]}"Проверка вывода
Ожидаются 1 и 0. Сам pipeline без pipefail обычно имеет статус 0. При включённом pipefail эта пара даёт общий статус 1. Встроенная логика set -e зависит от контекста конструкции и не заменяет явную обработку результата.
Границы применения
У grep отсутствие совпадений имеет собственный ненулевой статус. Завершение принимающего звена раньше отправителя может вызвать SIGPIPE. Прежде чем объявлять любой ненулевой код ошибкой данных, определите допустимые исходы конкретного конвейера.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Руководство bash(1)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Примеры для собственной Linux-системы с Bash и указанными утилитами. Наличие пакетов и набор опций проверьте в установленной версии; браузерный терминал поддерживает только своё подмножество.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.