Сегодня про хитрости с пайпами и кодами завершения в Bash. Максимально упрощаю, чтобы стало понятнее.
Собираем такую команду:
Если после её выполнения сделать: echo $?, то получим статус выхода 0. То есть у нас есть статус завершения именно команды true. НО теперь узнать с каким кодом завершилась первая команда false?
А вот так, модифицируем команду:
В этом случае будет получен код завершения 1, который справедлив для команды false. Как ты можешь заметить, если в PIPESTATUS изменить [0] на [1], мы снова получим статус завершения 0 (то есть для true).
➕ Подпишись на BashDays в телеграм
PIPESTATUS - это специальный массив переменных в оболочке Bash, который содержит статус завершения каждой команды в цепочке команд, выполняемой через конвейер (pipeline). Когда в вашем скрипте используется конструкция конвейера с несколькими командами, PIPESTATUS сохраняет статус завершения каждой из этих команд.
Аналогично можно манипулировать любой частью пайпа и получать нужные тебе статусы.
Есть еще много велосипедов для реализации желаемого, но этот коробочный самый распространенный и понятный. Изучай!
Больше про коды завершения, можешь найти в этом посте:
👇👇👇