Ошибка STDOUT при запуске команды grep в сценарии Perl 5.8.8 - PullRequest
0 голосов
/ 01 мая 2020

Я изменяю 16-летний сценарий Perl на производственном сервере telco, работающем под perl v5.8.8, созданным для i386- linux -thread-multi.

При возникновении тревоги сценарий просматривает некоторые вложенные папки журналов, чтобы определить виновное приложение на основе идентификатора сеанса.

Я столкнулся с проблемой буферизации 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...