В bash-скрипте я хотел бы захватить стандартный вывод длинной командной строки за строкой, чтобы их можно было анализировать и сообщать, пока начальная команда еще выполняется. Это сложный способ сделать это:
# Start long command in a separated process and redirect stdout to temp file
longcommand > /tmp/tmp$$.out &
#loop until process completes
ps cax | grep longcommand > /dev/null
while [ $? -eq 0 ]
do
#capture the last lines in temp file and determine if there is new content to analyse
tail /tmp/tmp$$.out
# ...
sleep 1 s # sleep in order not to clog cpu
ps cax | grep longcommand > /dev/null
done
Я хотел бы знать, есть ли более простой способ сделать это.
РЕДАКТИРОВАТЬ:
Чтобы уточнить мой вопрос, я добавлю это. longcommand
Отображает его статус построчно один раз в секунду. Я хотел бы поймать вывод до longcommand
завершения.
Таким образом, я могу потенциально убить, longcommand
если он не даст ожидаемых результатов.
Я пытался:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Но whatever
(например echo
) выполняется только после longcommand
завершения.