在Perl 5.8.8脚本中运行grep命令的STDOUT问题。

问题描述 投票:1回答:1

我正在修改一个有16年历史的Perl脚本,它在电信生产服务器上运行着为i386-linux-thread-multi构建的perl v5.8.8。

当一个警报被触发时,脚本会通过一些嵌套的日志文件夹,根据会话ID来识别有罪的应用程序。

我遇到了一个STDOUT缓冲问题,grep结果(一个文件路径)没有正确地分配给变量。 我把使用的grep命令记录下来了,所以我可以仔细检查脚本,果然,有一次,grep结果丢失了,变量仍然是空的。我试过几种不同的语法,但都是一样的行为。

我不能更新Perl的版本,也不能以任何方式修改它。

代码如下。之前尝试过的语法被注释掉了。

    binmode( STDOUT, ":unix" );
    #my $returnval = readpipe("$grepcommand");
    #my $returnval = qx/$grepcommand/;
    #my $returnval = `$grepcommand`;
    #my $returnval = qx ("\$grepcommand");

    # seems to give more reliable results than the alternate approaches above which also work:
    my $returnval;
    open CMD,'-|',"$grepcommand" or die $@;
    my $commandoutput;
    while (defined($commandoutput=<CMD>)) {
        $returnval = $commandoutput;
    }
    close CMD;

    chomp $returnval;
    print "grep command is $grepcommand\n";
    print "corresponding file found by grep command is $returnval\n";
perl
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.