【问题标题】:Send perl variables to a command and capture the output将 perl 变量发送到命令并捕获输出
【发布时间】:2012-02-03 09:28:40
【问题描述】:

我正在尝试将 perl 变量传递给系统命令,然后捕获输出以供以后使用,这是我当前的代码:

my $updatedCmd = "|svn diff --summarize $svnOldFull $svnNewFull";
my $updatedUrls = '';
open UPDATES, $updatedCmd or die "Can't get updates";
while(<UPDATES>) {
  print $_;
}

print "THIS_SHOULD_OUTPUT_AT_THE_END\n";

问题在于我得到了输出:

THIS_SHOULD_OUTPUT_AT_THE_END
A       /test
A       /test2
A       /deployment.txt

我希望能够在允许我的 perl 脚本继续运行之前捕获所有命令输出。

【问题讨论】:

    标签: perl stdout


    【解决方案1】:

    更现代的方法如下:

       my @cmd = qw(svn diff --summarize), $svnOldFull, $svnNewFull;
       open my $pipe, '-|', @cmd or die "oops: $!";
       while (<$pipe>) { ... }
    

    优势

    • 没有全局变量

    • 打开模式与文件/命令分开

    • 命令作为数组,所以shell中不需要引用

    【讨论】:

      【解决方案2】:

      您将管道放置在命令的错误端。试试这个:

      my $updatedCmd = "svn diff --summarize $svnOldFull $svnNewFull|";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多