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

gih*_*han 4 perl

我有两个Perl脚本以及GIT钩子脚本.在那里我正在验证GIT工作流程.这是调用堆栈的脚本.

pre-push - > unpush-changes - > dependency-tree

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

前推

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

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;
     }

   }
Run Code Online (Sandbox Code Playgroud)

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;
  }
Run Code Online (Sandbox Code Playgroud)

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

mob*_*mob 9

通常,子进程从其父进程继承环境的单独副本,并且子进程所做的更改不会传播到父环境. Env::Modify为这个问题提供了一个解决方法,实现了perlfaq所说的"shell魔法".

典型用法:

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"
...
Run Code Online (Sandbox Code Playgroud)