Найти тему
BASH DAYS | Linux Factory

Хитрости с pipe в Bash и exit кодами

Сегодня про хитрости с пайпами и кодами завершения в Bash. Максимально упрощаю, чтобы стало понятнее.

Собираем такую команду:

-2

Если после её выполнения сделать: echo $?, то получим статус выхода 0. То есть у нас есть статус завершения именно команды true. НО теперь узнать с каким кодом завершилась первая команда false?

А вот так, модифицируем команду:

-3

В этом случае будет получен код завершения 1, который справедлив для команды false. Как ты можешь заметить, если в PIPESTATUS изменить [0] на [1], мы снова получим статус завершения 0 (то есть для true).

Подпишись на BashDays в телеграм

PIPESTATUS - это специальный массив переменных в оболочке Bash, который содержит статус завершения каждой команды в цепочке команд, выполняемой через конвейер (pipeline). Когда в вашем скрипте используется конструкция конвейера с несколькими командами, PIPESTATUS сохраняет статус завершения каждой из этих команд.


Аналогично можно манипулировать любой частью пайпа и получать нужные тебе статусы.

Есть еще много велосипедов для реализации желаемого, но этот коробочный самый распространенный и понятный. Изучай!

Больше про коды завершения, можешь найти в этом посте:

👇👇👇

Bash Days | Linux | DevOps

Рекомендую почитать