Не могу получить результат от grep в цикле bash - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь получить информацию из файлов журнала, используя grep + tail -1:

#!/bin/bash
# declare an array called array and define 3 vales
array=( 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 )
array2=( 00 30 )
for i in "${array[@]}"
do
        for j in "${array2[@]}"
        do
                 output=$(grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* | tail -1)
                 echo /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j*
                 echo "$output"
        done
done

это выводит просто пустую строку, но я точно знаю, что фраза «отфильтровано» есть в журналах.

В чем может быть проблема? Я пробовал несколько вариантов одного и того же скрипта, но он просто возвращает пустую строку.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

При таком назначении выходного значения вы всегда должны перенаправлять стандартную ошибку (stderr) на стандартный выход (stdout). В вашем случае, если grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* не удастся, вывод ошибки не будет сохранен в переменной output, поэтому вам будет трудно отлаживать программу. Измените ваш скрипт, как показано ниже, где сообщение об ошибке также будет присвоено переменной output.

output=$(grep filtered /home/pavel/hasoffers_api/logs/tabatoo2_20180627$i$j* 2>&1 | tail -1)

Теперь, если строка поиска недоступна echo $output выведет пустую строку, а если файл журнала недоступен, будет напечатано сообщение об ошибке

Надеюсь, это поможет вам.

0 голосов
/ 29 июня 2018

Для начала, возможно, попробуйте проверить, существует ли файл, который вы получили, создав строку "tabatoo2_20180627 $ i $ j *".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...