我有一个调用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?
答案 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
所做的。