【发布时间】:2017-06-23 13:42:09
【问题描述】:
我有两个 Perl 脚本以及 GIT 钩子脚本。在那里我正在验证 GIT 工作流程。这里是脚本调用堆栈。
pre-push -> unpush-changes -> 依赖树
在 unpush-changes perl 脚本中有一个 for 循环将调用依赖树 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;
}
}
依赖树.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;
}
在我的 dependency-tree 脚本中,如果发生错误,我已经设置了 ENV 变量,这将在 unpush-changes 脚本。但它的 ENV 值为空,而不是 true。如果失败,我还尝试返回一些值并尝试验证它,但似乎它也不起作用。所以我的要求是我如何在所有脚本之间共享一个全局变量。如果有更好的方法,请告诉我。
【问题讨论】:
-
现在可以使用
Env::Modify -
@mob 我不知道那个模块。我将重新打开问题,以便您回答。然后,我们应该关闭另一个相关问题的链接。
-
如果您的所有
system调用都只是调用其他perl 脚本,更好的方法是将您的perl 脚本转换为函数/库并从单个perl 进程调用所有内容。在进程之间共享环境变量是多余的。
标签: perl