У сценарії 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
завершення.