【问题标题】:Am I returning error status correctly?我是否正确返回错误状态?
【发布时间】:2014-04-01 12:49:09
【问题描述】:

我的脚本末尾有这个 sn-p:

use List::Util qw(min max);
// more stuff..
my $maxReturnCode = max @retCodes;
print "Highest Error Code: $maxReturnCode\n";

exit($maxReturnCode >>8) unless $maxReturnCode == 0;
exit(0);

我在线程编译期间添加错误代码:

my $cmd = "$MAKE $MAKE_INVOCATION_PATH/$comp";
my $retCode = system($cmd);
push(@retCodes, $retCode);

但是,当我在最后打印最高错误代码时,它只是空白:

01-Apr-2014 06:03:25    Ended At: 06:03 AM
01-Apr-2014 06:03:25    
01-Apr-2014 06:03:25    Highest Error Code: 

我是不是转换错了?

【问题讨论】:

  • 如果被信号杀死了怎么办?这将导致exit(0)(成功),即使它不是。 sh 做了类似($? & 0x7F) ? (($? & 0x7F) | 0x80) : ($? >> 8) 的事情。

标签: perl exit-code


【解决方案1】:

system() 调用的返回码在 $?

使用$? >> 8 获取系统调用的真正退出值。

my $cmd = "$MAKE $MAKE_INVOCATION_PATH/$comp";
my $retCode = system($cmd);
push(@retCodes, $?>>8) if $retCode;

【讨论】:

    【解决方案2】:

    $maxReturnCode 是 undef,因为 @retCodes 是空的。要么您从未到达过 push,要么您有两个名为 @retCodes 的变量。

    您确实提到了线程,您是否尝试通过@retCodes 将值从一个线程传递到另一个线程?你分享了吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多