У меня есть Perl-скрипт, который запускается с помощью команды, как это:Захватив статус выхода из STDIN в Perl
/path/to/binary/executable | /path/to/perl/script.pl
Скрипт делает полезные вещи на выходе для двоичного файла, а затем выходит один раз STDIN выбегает (<> возвращает undef). Все это хорошо и хорошо, за исключением случаев, когда двоичные выходы с ненулевым кодом. Из POV скрипта он считает, что скрипт просто закончил чисто, и поэтому он очищает и завершает работу, с кодом 0.
Есть ли способ для сценария perl посмотреть, что такое код выхода? В идеале, я бы хотел что-то вроде этого, чтобы работать:
# close STDIN, and if there was an error, exit with that same error.
unless (close STDIN) {
print "error closing STDIN: $! ($?)\n";
exit $?;
}
Но, к сожалению, это не похоже на работу:
$ (date; sleep 3; date; exit 1) | /path/to/perl/script.pl /tmp/test.out
Mon Jun 7 14:43:49 PDT 2010
Mon Jun 7 14:43:52 PDT 2010
$ echo $?
0
Есть ли способ, чтобы это делать то, что я имею в виду?
Edited добавить:
Perl-скрипт манипулирует вывод бинарных команд в режиме реального времени, так что буферный все это в файл не является допустимым решением. Однако ему не нужно знать код выхода до конца сценария.
«bash выбрасывает статус выхода на труба ": это неправда - см. мой ответ. – intuited