2013-05-17 75 views
3

我有一個Perl腳本,被調用JAR文件...使用EXEC返回代碼不回來

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

我可以重現:

>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

+0

謝謝,那完美的作品 –