我有一个使用如下命令运行的 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 脚本正在实时操作二进制命令的输出,因此将其全部缓冲到文件中并不是一个可行的解决方案。但是,在脚本结束之前,它不需要知道退出代码。