ในงานก่อนหน้านี้ฉันไม่สามารถได้รับการเฝ้าดูความน่าเชื่อถือที่มีเพียงคำสั่ง Fu เพื่อให้ฉันได้สคริปต์เสื้อคลุมอย่างหนึ่งที่ด้านล่างซึ่งการตรวจสอบไฟล์ทุกpoll_durationวินาทีและ grepped สายใหม่สำหรับวลีที่สนใจ
#!/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
นี่คือในเครื่อง Unix บน Linux คุณสามารถไปหนึ่งดีขึ้นโดยใช้ของinotifyอินเตอร์เฟซ filewatcher หากแพ็คเกจนี้ ( inotify-toolsบน Ubuntu) มีอยู่ให้แทนที่
sleep $poll_duration
กับ
inotifywait -e modify "$file" 1>/dev/null 2>&1
การเรียกนี้จะบล็อกจนกว่าไฟล์จะถูกแก้ไข เวอร์ชันการบล็อกมีประสิทธิภาพเกือบเท่ากับที่คุณจะได้รับกับtail -f
เวอร์ชันหากสามารถกำหนดค่าไพพ์ให้ทำงานโดยไม่ต้องบัฟเฟอร์
หมายเหตุ:สคริปต์จะทำก่อนhead --lines=$new_linecount
เพื่อให้แน่ใจว่าบรรทัดที่เพิ่มลงในไฟล์หลังจากที่เราตรวจสอบแล้วจะไม่บิดเบือนไฟล์ที่ได้รับการตรวจสอบในลูปนี้