In einem Bash-Skript möchte ich die Standardausgabe eines langen Befehls zeilenweise erfassen, damit sie analysiert und gemeldet werden können, während der erste Befehl noch ausgeführt wird. Das ist die komplizierte Art, wie ich es mir vorstellen kann:
# 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
Ich würde gerne wissen, ob es einen einfacheren Weg gibt.
BEARBEITEN:
Um meine Frage zu klären, werde ich dies hinzufügen. Der longcommand
zeigt seinen Status zeilenweise einmal pro Sekunde an. Ich möchte die Ausgabe vor dem longcommand
Abschluss abfangen .
Auf diese Weise kann ich möglicherweise die töten, longcommand
wenn es nicht die Ergebnisse liefert, die ich erwarte.
Ich habe versucht:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Aber whatever
(zB echo
) wird erst ausgeführt, nachdem longcommand
abgeschlossen wurde.