Dalam skrip bash, saya ingin menangkap keluaran standar dari baris perintah panjang demi baris, sehingga dapat dianalisis dan dilaporkan saat perintah awal masih berjalan. Ini adalah cara rumit yang bisa saya bayangkan melakukannya:
# 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
Saya ingin tahu apakah ada cara yang lebih sederhana untuk melakukannya.
EDIT:
Untuk memperjelas pertanyaan saya, saya akan menambahkan ini. The longcommand
menampilkan baris status demi baris sekali per detik. Saya ingin menangkap output sebelum longcommand
selesai.
Dengan cara ini, saya berpotensi membunuh longcommand
jika tidak memberikan hasil yang saya harapkan.
Saya telah mencoba:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Tetapi whatever
(misalnya echo
) hanya dieksekusi setelah longcommand
selesai.