Вложенный цикл while не выполняется - PullRequest
1 голос
/ 20 апреля 2011

У меня есть следующий код, единственная проблема в том, что когда код попадает во вложенный цикл while, он пропускает его, я предполагаю, что условие не выполняется, но может ли кто-нибудь увидеть, что я что-то сделал неправильно? Я проверил, что все флаги, которые я даю сценарию, верны и что имя-задания - это то, что, я думаю, должно быть.

open $alOut,
     "/home/usr/bin/test.pl -j EW-% -j RA-% -l 0 | grep `date \"+%m/%d/%Y\"` | sort -k 3,3|";
while (<$alOut>) {
    chomp;
    my ($job_name, $date, $start_time, $end_time, $duration,
        $state, $return, $expected_end_time) = split(/\s+/, $_);

    # Go to next iteration if jobname is EW-INTERNAL-AUTOSYS,
    # EW-INTERNAL-DB-LONGQUERY-ALERT, EW-INTERNAL-DB-LONGQUERY-ALERT,
    # EW-CIIM-ADJ-TRIGGER, or EW-S140-ADJ-TRIGGER
    if (($job_name eq "EW-INTERNAL-AUTOSYS") ||
        ($job_name eq "EW-INTERNAL-DB-LONGQUERY-ALERT") ||
        ($job_name eq "EW-INTERNAL-SYSUP") ||
        ($job_name eq "EW-CIIM-ADJ-TRIGGER") ||
        ($job_name eq "EW-S140-ADJ-TRIGGER"))
        {
            next;
        }

    #Expected Start Time
    open $alOut2,
         "/home/usr/bin/test.pl -j $job_name -q -l 0 | grep -E `condition:|start_times:`";
    while (<$alOut2>) { .... }
}

Ответы [ 2 ]

5 голосов
/ 20 апреля 2011

Вам следует проверить ошибки от open:

open $fh, ... or die "Can't open: $!";

И в этом grep:

grep `condition:|start_times:`

вам, вероятно, нужны обычные одинарные кавычки ('), а не обратные галочки, оболочка попытается запустить команду с именем condition:. И я думаю, что вам не хватает окончательного | в этой команде.

3 голосов
/ 20 апреля 2011

Вы всегда должны проверять значение, возвращаемое open:

open "...whatever..." or die "Can't open: $!";

Это, вероятно, скажет вам все, что вам нужно знать, но случайно, я вижу две проблемы:

  1. Второе открытие не заканчивается символом |.
  2. Обратные пометки после grep должны быть апострофами.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...