次のようなコマンドで実行される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
それを私が意味することをさせる方法はありますか?
追加するために編集:
perlスクリプトは、バイナリコマンドの出力をリアルタイムで操作しているため、すべてをファイルにバッファリングすることは実行可能な解決策ではありません。ただし、スクリプトが終了するまで、終了コードを知る必要はありません。