Bir bash betiğinde, uzun bir komut satırının standart çıktısını satır satır yakalamak istiyorum, böylece ilk komut hala çalışırken analiz edilebilir ve raporlanabilirler. Bu, yapmayı hayal edebildiğim karmaşık yoldur:
# 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
Bunu yapmanın daha basit bir yolu olup olmadığını bilmek istiyorum.
DÜZENLE:
Sorumu netleştirmek için bunu ekleyeceğim. longcommand
Saniyede bir kez çizgiyle görüntüler durumunu hattı. longcommand
Tamamlanmadan önce çıktıyı yakalamak istiyorum .
Bu şekilde, longcommand
beklediğim sonuçları sağlamıyorsa , potansiyel olarak öldürebilirim .
Denedim:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Ancak whatever
(örneğin echo
) yalnızca longcommand
tamamlandıktan sonra yürütülür.