Ini mungkin masalah buffering. Lihat posting SO ini tentang menonaktifkan buffer otomatis saat menggunakan pipa . Anda dapat menggunakan unbuffer
perintah dari expect
:
$ unbuffer tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Sunting : Karena Anda memiliki saluran pipa yang lebih panjang, Anda mungkin perlu membatalkan pembuatan setiap perintah (kecuali yang terakhir):
$ unbuffer tail -f log.txt | unbuffer egrep 'WARN|ERROR' | tee filtered_output.txt
Sunting 2 : unbuffer
tersedia di Cygwin dari expect
paket sumber (mis. Harapkan-20030128-1-src.tar.bz2 , ditemukan di expect/examples
folder), tetapi ini skrip yang sangat pendek. Jika Anda expect
sudah menginstal paket, cukup masukkan ini ke dalam skrip bernama unbuffer
di /usr/local/bin
direktori Anda :
#!/usr/bin/expect --
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
eval spawn -noecho $argv
set timeout -1
expect
Pada Debian, unbuffer
perintah disediakan dalam expect-dev
paket dan diinstal sebagai expect_unbuffer
.
expect
paket.Ketika menggunakan perintah yang tidak benar-benar 'selesai' (seperti
tail -f
), ini sebenarnya tidak benar-benar berfungsi atau sama sekali (sama sekali).sumber
Ini adalah versi
unbuffer
yang saya miliki:sumber
Seperti yang telah ditunjukkan orang lain, Anda dapat menggunakan
unbuffer
utilitas dari Expect.Namun, perlu diketahui bahwa tergantung pada sistem Anda dan versi Expect yang tersedia, Anda mungkin perlu menggunakan
-p
peralihan untuk tidak membangun buffer. Mengutip halaman manual:Jadi Anda mungkin perlu doa ini:
BTW, lihat artikel ini untuk penjelasan menyeluruh tentang masalah buffering output: http://www.pixelbeat.org/programming/stdio_buffering/
sumber