#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