In uno script bash, vorrei catturare l'output standard di un lungo comando riga per riga, in modo che possano essere analizzati e riportati mentre il comando iniziale è ancora in esecuzione. Questo è il modo complicato che posso immaginare di farlo:
# 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
Vorrei sapere se esiste un modo più semplice per farlo.
MODIFICARE:
Per chiarire la mia domanda, aggiungerò questo. Il longcommand
display sua linea di stato per linea volta al secondo. Vorrei catturare l'output prima del longcommand
completamento.
In questo modo, posso potenzialmente uccidere longcommand
se non fornisce i risultati che mi aspetto.
Ho provato:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Ma whatever
(ad es. echo
) Viene eseguito solo dopo il longcommand
completamento.