【问题标题】:Access batch environment variables inside Perl script在 Perl 脚本中访问批处理环境变量
【发布时间】:2017-10-07 03:58:55
【问题描述】:

我正在尝试使用 Perl 脚本将 Jenkins 工件发送到共享驱动器构建后活动,但在下面的代码中,%versionName% 值已设置为批处理脚本中的环境变量。

我不知道如何将环境变量传递给 Perl 脚本。我得到了输出Motiv_Android__V_%versionName%,但我期待Motiv_Android__V_1.X.X.X%versionName% 的值为1.X.X.X

use warnings;

use File::Copy;
use File::Copy::Recursive qw (dircopy);


my $source_dir   = 'C:\test';
my $target_dir   = 'Z:\main\term\ban\test';
my $artifact_dir = 'C:\Users\lavana\Projects\MyApplication\';

my ( %versionName ) = @ARGV;

$Artifact_name = "Motiv_Android_\_V\_%versionName%";

print "artifact $Artifact_name\n";

mkdir $Artifact_name;

opendir( my $DIR, $source_dir ) || die "can't opendir $source_dir: $!"; 

my @files = readdir( $DIR );

foreach my $t ( sort grep( /^.*\.apk$/, @files ) ) {

    if ( "$source_dir/$t" ) {
        copy "$source_dir/$t", "./$Artifact_name/$t"
        dircopy("$artifact_dir/$Artifact_name","$target_dir/$Artifact_name");
    }
}

closedir($DIR);

【问题讨论】:

  • 要缩进代码,你按制表符不返回:P
  • 您显示的代码不是您的真实程序。字符串'C:\Users\lavana\Projects\MyApplication\' 转义了结束单引号,从而产生一个多行字符串,该字符串以"can't opendir $source_dir: $!" 中的撇号结尾,并使您的其余代码变得无意义。如果您需要帮助解决您的问题,那么最好不要对我们撒谎。请发布您的真实代码。

标签: perl batch-file jenkins


【解决方案1】:

通过%ENV 哈希访问环境。

替换

$Artifact_name = "Motiv_Android_\_V\_%versionName%";

$Artifact_name = "Motiv_Android_\_V\_$ENV{versionName}";

$Artifact_name = "Motiv_Android_\_V\_" . $ENV{versionName};

请注意,那些斜线是无用的,所以你可以使用

$Artifact_name = "Motiv_Android__V_" . $ENV{versionName};

【讨论】:

  • 我正在创建文件夹,但文件没有复制到我的 $target_dir 中。
  • 你能不能给点建议
【解决方案2】:

【讨论】:

  • 我想在 Perl 运行之前访问批处理环境变量,我运行了 .bat 文件,该文件设置了环境变量,并且想要在 Perl 程序中检索相同的值。请问有什么解决办法吗?
  • 请不要链接到使用短语“关联数组”的文章。自 1994 年 Perl 5 发布以来,它们一直被称为“哈希”。任何称它们为关联数组的文章要么非常古老,要么由 Perl 知识过时的人编写。
  • @ikegami:我知道“关联数组”很好地描述了 Perl 哈希实际上是什么。我的观点是,社区在 20 多年前已经放弃了这个术语,现在,它在一篇文章中的使用应该被视为一个危险信号。
  • @DaveCross:确实,这个词无论如何都是粗俗和懒惰的。 xlinux.nist.gov 有“关联数组 (数据结构) 定义: 可以通过键随机访问的项目集合,通常是字符串”,它同样适用于普通数组,因此标签非常模棱两可。
【解决方案3】:

要在 perl 中获取环境变量,您应该使用 %ENV 或 Env perl 模块。对于您的示例,这可能是最简单的:

my $version_name = $ENV{versionName}

【讨论】:

  • 您所说的变量是一个哈希,所以它被称为%ENV,而不是$ENV,并且您使用大括号而不是括号来访问这些值 - $ENV{versionName}
  • 喂。固定的。我有一段时间没有写 perl 了,语法被越过了。我的手指并不总是按照我的要求去做。我只是搞砸了对哈希的引用。谢谢指正。
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多