En un script bash, me gustaría capturar la salida estándar de un comando largo línea por línea, para que puedan analizarse e informarse mientras el comando inicial aún se está ejecutando. Esta es la forma complicada que puedo imaginar de hacerlo:
# 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
Me gustaría saber si hay una manera más sencilla de hacerlo.
EDITAR:
Para aclarar mi pregunta, agregaré esto. El longcommand
muestra su estado línea por línea una vez por segundo. Me gustaría captar la salida antes de que se longcommand
complete.
De esta manera, potencialmente puedo matar longcommand
si no proporciona los resultados que espero.
Yo he tratado:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Pero whatever
(por ejemplo echo
) solo se ejecuta después de longcommand
completarse.