Dans un script bash, je voudrais capturer la sortie standard d'une longue ligne de commande ligne par ligne, afin qu'ils puissent être analysés et signalés pendant que la commande initiale est toujours en cours d'exécution. Voici la manière compliquée que j'imagine de le faire:
# 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
Je voudrais savoir s'il existe un moyen plus simple de le faire.
MODIFIER:
Afin de clarifier ma question, je vais ajouter ceci. Le longcommand
affiche son état ligne par ligne une fois par seconde. Je voudrais attraper la sortie avant la longcommand
fin.
De cette façon, je peux potentiellement tuer le fichier longcommand
s'il ne fournit pas les résultats attendus.
J'ai essayé:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Mais whatever
(par exemple echo
) ne s'exécute qu'une fois longcommand
terminé.