вычисление строк из стандартного вывода

#bash #scripting

#bash #создание сценариев

Вопрос:

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

Я все еще хочу иметь возможность видеть стандартный вывод на экране. Есть ли простой способ добиться этого? Спасибо!

Комментарии:

1. Вы имеете в виду, что хотите повторить строки, которые вы анализируете?

Ответ №1:

Существует несколько вариантов зацикливания на входных данных, но одна из возможностей, таким образом:

 my_cmd | while read line; do
    echo "$line"
    my_process "$line"
done
  

Комментарии:

1. обратите внимание, что вы можете использовать несколько имен переменных для чтения в них фрагментов ( | while read id number description; do echo $number: $id; done )

2. Чтобы сохранить пробелы, заключите переменную в кавычки: echo "$line"; my_process "$line"

3. Также обратите внимание, что помещение while в конвейер означает, что тело while выполняется в подпроцессе. В зависимости от того, что my_process есть, OP может этого не хотеть, поэтому: while read -r line; do ...; done < <(my_cmd)

Ответ №2:

Это должно делать то, что вы хотите:

 for string in "a" "b" "c"
do
    output=`echo ${string}`
    echo ${output}
    if [ ${output} == "b" ] ; then
        echo "do something"
    fi
done
  

Просто замените первое echo своей программой.

Комментарии:

1. Выполняется итерация по списку строковых литералов. В вопросе специально задавалось, чтобы строки в стандартном выводе были объектом, подлежащим повторению.

2. Выполняются следующие работы: для строки в ls . выполняется echo $string