Saya ingin PC saya membuat bip sistem pada setiap acara ekor
Saya memiliki perintah berikut
tail -f development.log | grep "something rare"
apakah ada cara mudah seperti menyalurkannya ke sesuatu yang berbunyi bip? Suka
tail -f development.log | grep "something rare" | beep
jika demikian apakah output grep akan tetap ditampilkan?
Jawaban:
Cukup tentukan
beep
sebagai berikut:Kemudian, Anda dapat menggunakan perintah Anda:
sumber
sed
atau serupa (antara ekor dan grep) dengan regexp gantisomething rare
dengan itu sendiri berkali-kali. Berapa kali perlu dilakukan tergantung pada seberapa banyak pipa disangga.tail -f development.log | stdbuf -oL -eL grep "something rare" | beep
Layar GNU memiliki fitur bawaan untuk berbunyi bip ketika jendela yang diberikan berubah: lihat bagian yang relevan dari halaman manual .
Ringkasan judul:
Seperti yang ditunjukkan dalam komentar, ini akan berbunyi bip pada setiap entri log baru, bukan hanya entri yang cocok dengan "sesuatu yang langka", jadi ini tidak cukup sesuai dengan yang diminta OP. Masih trik yang berguna untuk mengetahui IMHO.
Anda bisa mendapatkan yang terbaik dari kedua dunia dengan membuka dua
screen
jendela (<C-a> c
untuk membuka jendela,<C-a> <C-a>
untuk beralih di antara dua jendela):tail -f yourfile.log | grep 'something rare'
tail -f yourfile.log
Kemudian Anda bisa duduk menonton gulir log melewati di jendela 2, dan Anda akan mendapat bunyi bip dari jendela 1 ketika "sesuatu yang langka" terjadi.
screen
sangat serbaguna - Saya sangat merekomendasikan membaca di atasnya.sumber
tail -f yourfile.log | grep something\ rare
bukan hanyatail -f logfile
something rare
. Diedit untuk mencerminkan ini. Grep akan bekerja, tetapi kemudian dia tidak akan melihat sisa log, hanya garis langka - seperti yang saya mengerti dia ingin dapat menonton seluruh log bergulir, tetapi waspada pada peristiwa tertentu.Anda dapat menghentikan output agar tidak buffered di perintah grep. Lihat man grep untuk detailnya.
Anda dapat menyalurkan output grep ke bip.
Contoh berikut ini dari ...
Ada banyak hal bagus dalam manual itu. Kalau saja kita tidak perlu membacanya untuk menemukannya. ;-)
sumber
Perintah arloji memiliki opsi --beep, dan Anda dapat mengatur interval polling juga, tetapi standar dengan 2 detik harus ok
sumber
watch
bekerja dengan menjalankan parameter / perintah Anda setiap bagian (interval) kemudian datang hasilnya ke jalankan sebelumnya. Dengan demikian Anda akan ingin menggunakan versi normal dari perintah tail, alih-alih menggunakantail -f
watch --beep
dan membungkus ekor / grep saya, saya masih tidak mendapat bunyi bip).Anda bisa menggunakan sed untuk menambahkan control-G sebagai berikut:
atau hanya pada garis langka, tanpa menggunakan grep, sebagai berikut:
yang mengatakan: di garis mana sesuatu yang langka terjadi, s ubstitute segalanya untuk hal-hal yang sama dengan kontrol-G tertempel di akhir, dan cetak (tapi tidak mencetak garis non-matching). Bagus sekali!
sumber
Hm, gampang-gampang susah. Kita mungkin bisa melakukan sesuatu seperti ini?
Atau dalam kasus Anda
Tampaknya akan melakukan beberapa buffering. Saya akan melihat apakah ada cara untuk mematikan buffering ini oleh
for
loop.Rupanya, Anda harus dapat menyesuaikan buffering pipa dengan menggunakan
ulimit -p
tetapi itu terus mengeluh tentang argumen tidak valid kepada saya. Saya juga menemukan posting yang mengklaim Anda perlu mengkompilasi ulang kernel untuk mengubah batas ini.sumber
Dalam pekerjaan sebelumnya, saya tidak bisa mendapatkan pengamat yang dapat diandalkan hanya dengan command-fu, jadi saya punya skrip pembungkus seperti yang di bawah ini, yang memeriksa file setiap poll_duration detik dan mengambil baris baru untuk frasa yang tertarik.
Ini pada mesin Unix. Pada Linux, Anda dapat pergi satu lebih baik dengan menggunakan nya inotify antarmuka filewatcher. Jika paket ini ( inotify-tools pada Ubuntu) hadir, ganti
dengan
Panggilan ini memblokir hingga file diubah. Versi pemblokiran hampir seefisien apa yang Anda dapatkan dengan
tail -f
versi tersebut jika pipa dapat dikonfigurasi agar berfungsi tanpa buffering.Catatan: Skrip terlebih dahulu melakukan a
head --lines=$new_linecount
untuk memastikan bahwa baris yang ditambahkan ke file setelah kami memeriksanya tidak memiringkan potongan file yang diperiksa dalam loop ini.sumber