Шпаргалки / Объяснение

Шпаргалка: проверять статусы всех звеньев pipeline

Разберите статус последней команды, pipefail и массив PIPESTATUS в Bash. Сохраняйте результат сразу и не смешивайте ошибку обработки с пустой выборкой.

Начальный6 минОбщие принципы LinuxGNU Coreutils · documented stable optionsBash · pipeline semantics

Когда открыть эту шпаргалку

Pipeline может напечатать правдоподобный результат, даже если первое звено завершилось ошибкой. По умолчанию статус определяется последней командой. Для диагностики нужны либо общая политика pipefail, либо статусы отдельных звеньев.

Выбор команды

Проверяйте статусы сразу после выполнения: даже простая команда присваивания или печати обновляет данные о последнем pipeline.

Что выяснитьКоманда или выражениеКак читать результат
Статус последней команды$?Значение нужно сохранить до следующей команды.
Включить сводку ошибокset -o pipefailНенулевой статус последнего справа ошибочного звена; не статус первого сбоя по времени.
Все звенья в Bash"${PIPESTATUS[@]}"Массив относится к последнему foreground pipeline.
Сохранить массивcodes=("${PIPESTATUS[@]}")После присваивания читайте codes, а не уже обновлённый PIPESTATUS.
Ограничить изменение shell( set -o pipefail; false | true; printf '%s\n' "$?" )Настройка остаётся внутри subshell.

Короткая последовательность

Пример намеренно объединяет неуспешную и успешную встроенные команды. Он не работает с файлами и показывает оба индивидуальных статуса.

Локальная Linux-система
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 или проверьте знакомые команды в учебном терминале.

Поиск по Linux

Поиск локальный. ↑ ↓ — перейти к результату, Enter — открыть.

Навигация