-2

我正在尝试通过 bash 运行 perl 脚本,并获取 perl 的退出值。

perl_script.pl

print "test1";
sub a{
  my @array = ("a","b");
  if ($#array ne -1){
   return 1;
  }
  else {return 0;}
}
my $result=a(arg1,arg2);
exit $result;

bash.sh

VARIABLE_1=$("perl_script.pl" arg1 arg2)
RESULT=$? 

“$?” 无论退出值是什么,变量都保持返回 0。你知道另一种从 bash 中检索 perl 退出值的方法吗?

提前致谢!

4

2 回答 2

1

bash$?将设置为传递给exit[1]的值。

$ perl -e'exit 3'

$ echo $?
3

$ perl -e'exit 4'

$ echo $?
4

$ perl perl_script.pl
test1
$ echo $?
1

  1. 如果程序死于异常,退出代码将设置为非零值。如果程序既没有终止也没有调用exit,退出代码将设置为零。
于 2020-05-01T19:44:03.287 回答
-1

我注意到了这个问题的根本原因。这是一个简单但棘手的问题。所以我想在这里分享一下。

bash.sh

VARIABLE_1=$("perl_script.pl" arg1 arg2)
echo $?
RESULT=$? 

echo 进程已访问 $?,因此 RESULT 变量将保存 echo 操作的退出值,该值始终为 0(成功操作)

修复

VARIABLE_1=$("perl_script.pl" arg1 arg2)
RESULT=$? 
echo $RESULT

作为结论,$? 仅在脚本执行后立即使用。

于 2020-05-01T20:24:58.177 回答