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.
#!/bin/bash
file=$1
phrase=$2
poll_duration=$3
typeset -i checked_linecount
typeset -i new_linecount
typeset -i new_lines
let checked_linecount=new_linecount=new_lines=0
echo "Watching file $file for phrase \"$phrase\" every $poll_duration seconds"
while [ 1 ]
do
let new_linecount=`wc -l $file| awk '{print $1}'`
if [[ $new_linecount > $checked_linecount ]]; then
let "new_lines = $new_linecount-$checked_linecount"
head --lines=$new_linecount "$file" | tail --lines=$new_lines | grep "$phrase" && beep
let checked_linecount=$new_linecount
fi
sleep $poll_duration
done
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
sleep $poll_duration
dengan
inotifywait -e modify "$file" 1>/dev/null 2>&1
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.