Как обнаружить ошибку в начале конвейера? - PullRequest
0 голосов
/ 15 ноября 2018

В моем скрипте мне нужно работать со статусом завершения команды non-last конвейера:

 do_real_work 2>&1 | tee real_work.log

К моему удивлению, $? содержит код выходаиз tee.Действительно, следующая команда:

false 2>&1 | tee /dev/null ; echo $?

выводит 0. Сюрприз, потому что (почти) эквивалент csh

false |& tee /dev/null ; echo $status

печатает 1.

Как мне получитькод выхода команды non-last самого последнего конвейера?

1 Ответ

0 голосов
/ 15 ноября 2018

Bash имеет set -o pipefail, который использует первый ненулевой код выхода (если есть) в качестве кода выхода конвейера.

В оболочке POSIX такой функции AFAIK нет.Вы можете обойти это другим подходом:

tail -F -n0 real_work.log &
do_real_work > real_work.log 2>&1
kill $!

То есть, начните следовать еще не существующему файлу перед выполнением команды и завершите процесс после выполнения команды.

...