Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从bash脚本获取perl退出值_Bash_Perl_Perlscript - Fatal编程技术网

如何从bash脚本获取perl退出值

如何从bash脚本获取perl退出值,bash,perl,perlscript,Bash,Perl,Perlscript,我试图通过bash运行perl脚本,并获取perl的exit值 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=

我试图通过bash运行perl脚本,并获取perl的exit值

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=$? 
VARIABLE_1=$("perl_script.pl" arg1 arg2)
echo $?
RESULT=$? 
“$?”变量始终返回0,无论退出值是多少。 您知道从bash检索perl出口值的另一种方法吗


提前谢谢

bash的
$?
将设置为传递给
退出的值

$perl-e'exit 3'
$echo$?
3.
$perl-e'exit 4'
$echo$?
4.
$perl perl_script.pl
测试1
$echo$?
1.

  • 如果程序因异常而死亡,则退出代码将设置为非零值。如果程序既没有死机也没有调用退出,则退出代码将被设置为零

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

    bash.sh

    VARIABLE_1=$("perl_script.pl" arg1 arg2)
    RESULT=$? 
    
    VARIABLE_1=$("perl_script.pl" arg1 arg2)
    echo $?
    RESULT=$? 
    
    echo进程已访问$?,因此结果变量将保存echo操作的退出值,该值始终变为0(成功操作)

    修复

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

    作为结论,美元?仅在脚本执行后一次性使用

    对此有一些想法:向perl脚本中添加一个shebang,使其可执行,使用
    /perl\u script.pl
    您的bash代码是正确的。您的系统中出现了其他错误或缺失question@Cyrus它不起作用。@jordanm我只是编辑了question@Shieryn我完全按照原样复制了perl和bash,并没有重现该问题。Nit:
    echo
    可以使用0以外的代码退出。为什么你在问题中忽略了回音?换句话说,请不要说你发布的代码做了什么,而不是做了什么,请只发布展示你描述的行为的代码。所以。。。您的实际代码中是否有额外的
    echo$?
    (未在Q中显示)?如果是这样的话,我建议用一个清晰的注释来更新这个问题。或者,你只是发布了一个观察?无论如何,这不是一个“答案”,我建议你删除它。至于,它总是由shell为最后执行的命令进行设置,粗略地说。例如,见。