gpt4 book ai didi

perl - 当我使用非零参数显式调用 exit 时,为什么我的 Perl 脚本会返回零返回码?

转载 作者:行者123 更新时间:2023-12-03 14:41:17 25 4
gpt4 key购买 nike

我有一个调用另一个脚本的 Perl 脚本。 Perl 脚本应该传播脚本的返回代码,但似乎向其调用者(Java 应用程序)返回零,尽管显式调用 exit $scriptReturnCode .

代码和输出如下(我意识到 <=> 可以/应该是 != 但这就是我所拥有的):

print "INFO: Calling ${scriptDirectory}/${script} ${args}"
$scriptReturnCode = system("${scriptDirectory}/${script} ${args}");

if ( $scriptReturnCode <=> 0 ) {
print "ERROR: The script returned $scriptReturnCode\n";
exit $scriptReturnCode;
} else {
print "INFO: The script returned $scriptReturnCode.\n";
exit 0;
}

我的 Java 输出是:
20/04/2010 14:40:01 - INFO: Calling /path/to/script/script.ksh arg1 arg2 
20/04/2010 14:40:01 - Could not find installer files <= this is from the script.ksh
20/04/2010 14:40:01 - ERROR: The script returned 256
20/04/2010 14:40:01 - Command Finished. Exit Code: 0 <= this is the Java app.

最佳答案

您需要将返回码从 system() 移开按 8 位调用。

例如。 $exit_value = $? >> 8; # 在你的脚本中 $?是 $scriptReturnCode

来自 http://perldoc.perl.org/perlfaq8.html :

system() runs a command and returns exit status information (as a 16 bit value: the low 7 bits are the signal the process died from, if any, and the high 8 bits are the actual exit value



对核心转储的更扩展的代码检查也可能如下所示:
system();
if ($? == -1) {
print "failed to execute: $!\n";
} elsif ($? & 127) {
printf "child died - signal %d, %s coredump\n",
($? & 127), ($? & 128) ? 'with' : 'without';
} else {
printf "child exited with value %d\n", $? >> 8;
}

更新:根据 ysth 的精彩提示,退出代码被截断为 8(低)位,因此返回 256 而不是预期的 1 最终为 0。同样,返回 257 最终为 1。

关于perl - 当我使用非零参数显式调用 exit 时,为什么我的 Perl 脚本会返回零返回码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2682113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com