На самом деле я пытаюсь написать сценарий оболочки, который записывает вывод команды в файл, но, поскольку выполнение команды занимает много времени (около 15 минут), я хотел бы начать синтаксический анализ вывода команды (content файла) до завершения команды, поэтому я могу отправлять сообщения на стандартный вывод (пользователю), например:
10% complete
45% complete
и так далее.
Я думал об использовании параллельного программирования, но не разбирался в этом.
Я действительно решил проблему, используя tail
и вопрос о переполнении стека Завершение tail -f, запущенного в сценарии оболочки.
# Solution
($(command) > ${FILE}) &
tail -f --pid=$! ${FILE} | while read line
do
echo $line
# Can parse each line output here
# Example: send errors to log file
if echo $line | grep -qi "error"
then
echo $line >> ${LOG}
fi
done
Спасибо всем за помощь.
Используйте tail и вставьте его в свой парсер.
Трубы, тройник и хвост (тройник - центральная часть вопроса, поскольку он дублировал стандартный вывод. Если бы файл sed был тем файлом, который вы использовали для анализа данных, примером был бы такой:
kbrandt@k$ a=0; while [[ a -lt 10 ]]; do
> echo foo; a=$(( $a + 1));
> done | tee -a unprocessed | sed 's/foo/bar/' > processed
kbrandt@kbrandt$ cat unprocessed
foo
foo
foo
...
kbrandt@kbrandt$ cat processed
bar
bar
...
Затем вы можете запустить его как задание и обработать хвост, или просто tail -f processed
в другом окне.
хвост -f будет следовать файл в момент его создания.
попробуйте это с файлом журнала.
tail -f / var / log / messages например.
вы увидите файл журнала, выводимый на консоль, как он появляется в журнале.