使用exec的返回代码没有回来

时间:2013-05-17 20:32:11

标签: perl

我有一个调用JAR文件的Perl脚本......

exec("$java_path/java -jar testjar.jar");

在代码中我遇到JAR文件出错的情况(按预期)。当我在Windows或Unix命令行上运行命令时,返回码为“1”。但是,当我运行调用JAR的Perl脚本时,在Unix上我得到“1”但在Windows上我得到“0”(没有错误)。

注意:在Windows上,我使用“echo%errorlevel%”在运行JAR /脚本后立即获取返回代码。在Unix上,我使用了“echo $?”。

为什么这适用于Unix而不适用于Windows?

1 个答案:

答案 0 :(得分:4)

我可以重现:

>perl -e"exec 'perl -eexit(1)' or die"

>echo %ERRORLEVEL%
0

我会把它称为Perl中的一个错误。请记住,exec是一个unix概念,在Windows中没有并行。仿真显然不会传播退出代码。解决方法:

 use POSIX qw( _exit );

 if ($^O eq 'MSWin32') {
     system($cmd);
     _exit($? >> 8);
 } else {
     exec($cmd);
 }

这基本上是exec所做的。