如何在Perl脚本中共享ENV变量

前端之家收集整理的这篇文章主要介绍了如何在Perl脚本中共享ENV变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个Perl脚本和GIT钩子脚本.在那里我正在验证GIT工作流程.这是调用堆栈的脚本.

预推 – > unpush-changes – >依赖关系树

unpush-changes perl脚本中有一个for循环,它将调用dependency-tree perl脚本.

前推

system("unpushed-changes");
  my $errorMsg = $ENV{'GIT_FLOW_ERROR_MSG'}// '';
  if($errorMsg eq "true"){
     print "Error occured!";
   }

unpush-changes.pl

for my $i (0 .. $#uniqueEffectedProjectsList) {
      my $errorMsg = $ENV{'GIT_FLOW_ERROR_MSG'}// '';
      if($errorMsg ne "true"){
        my $r=system("dependency-tree $uniqueEffectedProjectsList[$i]");
     }else{
        exit 1;
     }

   }

dependency-tree.pl

if(system("mvn clean compile  -DskipTests")==0){
     print "successfully build"; 
     return 1;
 }else{
      $ENV{'GIT_FLOW_ERROR_MSG'} = 'true';
      print "Error occured";
      return 0;
  }

在我的依赖树脚本中,如果发生错误,我已经设置了ENV变量,并且将在unpush-changes脚本中的每次迭代中进行检查.但是它的ENV值为空而不是true.我也尝试返回一些值,如果失败并尝试验证它,但似乎它也没有工作.所以我的要求是我如何在所有脚本之间共享一个全局变量.如果有更好的方法,请告诉我.

解决方法

通常,子进程从其父进程继承环境的单独副本,并且子进程所做的更改不会传播到父环境.
Env::Modify提供了解决此问题的解决方法,该问题实现了perlfaq所讨论的 “shell magic”.

典型用法

use Env::Modify 'system',':bash';

print $ENV{FOO};                   #   ""
system("export FOO=bar");
print $ENV{FOO};                   #   "bar"
...
print $ENV{GIT_FLOW_ERROR_MSG};    #   ""
system("unpushed-changes");
print $ENV{GIT_FLOW_ERROR_MSG};    #   "true"
...

猜你在找的Perl相关文章