3

我有一个调用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 上无效?

4

1 回答 1

4

我可以重现:

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

>echo %ERRORLEVEL%
0

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

 use POSIX qw( _exit );

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

exec无论如何,这基本上是什么。

于 2013-05-17T20:54:07.433 回答