TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #576 688
PIPESTATUS: как узнать, где именно сломался пайп

Большинство администраторов знают про $?, но при работе с пайпами он может вводить в заблуждение.

Посмотрим на пример:

grep ERROR app.log | sort | uniq
echo $?


Если пайп состоит из нескольких команд, $? покажет код возврата только последней из них.

Если grep завершился с ошибкой, а uniq отработал успешно, вы увидите:

0


Хотя одна из команд фактически провалилась.

▪️Решение - PIPESTATUS

После выполнения пайпа Bash сохраняет коды возврата всех его команд в массиве PIPESTATUS:

grep ERROR app.log | sort | uniq

echo "${PIPESTATUS[@]}"


Результат может выглядеть так:

2 0 0


Здесь видно, что ошибка произошла именно в grep.

▪️Проверка конкретного этапа

Можно обратиться к нужному элементу массива:

grep ERROR app.log | sort | uniq

echo "${PIPESTATUS[0]}"


Проверяем первую команду в цепочке.

echo "${PIPESTATUS[1]}"


Проверяем вторую.

▪️А что насчёт pipefail?

Многие включают:

set -o pipefail


Это полезно — теперь пайп вернёт ошибку, если упала любая команда внутри него.

Но pipefail не показывает, какой именно этап завершился неудачно.
Для диагностики всё равно пригодится PIPESTATUS.

▪️Почему это важно

Если в скрипте есть длинные цепочки из grep, awk, sed, jq, sort и других утилит, обычный $? может скрыть проблему. PIPESTATUS позволяет быстро понять, где именно произошёл сбой.

BashTex 📱 #scripts #pipestatus
  • 🔥 7
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →