Привет. Сегодня про хитрости с пайпами и кодами завершения. Максимально упрощаю, чтобы стало понятнее.
Собираем такую команду:
false | true
Если после её выполнения сделать echo $?, то получим статус выхода 0. То есть у нас есть статус завершения именно команды true. Но как теперь узнать, с каким кодом завершилась первая команда false?
А вот так, модифицируем команду:
false | true; (exit ${PIPESTATUS[0]})
false.Как ты можешь заметить, если в PIPESTATUS изменить [0] на [1], мы снова получим статус завершения 0, то есть для true.
Аналогично можно манипулировать любой частью пайпа и получать нужные тебе статусы.
command1 | command2 | command3
echo "${PIPESTATUS[0]}"
echo "${PIPESTATUS[1]}"
echo "${PIPESTATUS[2]}"
Больше про коды завершения можешь найти в этом посте.








Комментарии