Önceki bir işte, sadece komut-fu ile güvenilir bir izleyici alamadım, bu yüzden her anket_duration saniyede dosyayı inceleyen ve ilgili ifade için yeni satırları selamlayan aşağıdaki gibi bir sarıcı komut dosyası vardı .
#!/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
Bu bir Unix makinesindeydi. Linux'ta, onun kullanarak daha iyi bir tane gidebilir Inotify filewatcher arayüzü. Bu paket ( Ubuntu'da inotify araçları ) varsa, değiştirin
sleep $poll_duration
ile
inotifywait -e modify "$file" 1>/dev/null 2>&1
Bu çağrı, dosya değiştirilene kadar engeller. Engelleme sürümü, tail -f
arabellek arabelleğe alınmadan çalışacak şekilde yapılandırılabiliyorsa , sürümle alacağınız kadar etkilidir .
Not: Komut dosyası head --lines=$new_linecount
, dosyayı kontrol ettikten sonra dosyaya eklenen satırların, bu döngüde kontrol edilen dosyanın yığınını çarpmadığından emin olmak için bir a yapar .