पिछली नौकरी में, मुझे केवल कमांड-फ़्यू के साथ एक विश्वसनीय द्रष्टा नहीं मिल सकता था, इसलिए मेरे पास नीचे की तरह एक आवरण स्क्रिप्ट थी, जिसने फ़ाइल को हर प्रदूषित सेकंड का निरीक्षण किया और इच्छुक वाक्यांश के लिए नई पंक्तियों को पकड़ लिया।
#!/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
यह एक यूनिक्स मशीन पर था। लिनक्स पर, आप इसके इनवाइट फाइलवॉचर इंटरफ़ेस का उपयोग करके एक बेहतर जा सकते हैं । यदि यह पैकेज ( उबंटू पर इनोटिफाई-टूल्स ) मौजूद है, तो प्रतिस्थापित करें
sleep $poll_duration
साथ में
inotifywait -e modify "$file" 1>/dev/null 2>&1
फ़ाइल को संशोधित करने तक यह कॉल ब्लॉक करता है। अवरुद्ध संस्करण लगभग उतना ही कुशल है जितना कि आपको उस tail -f
संस्करण के साथ क्या मिलेगा यदि पाइप को बफरिंग के बिना काम करने के लिए कॉन्फ़िगर किया जा सकता है।
नोट: स्क्रिप्ट पहले यह head --lines=$new_linecount
सुनिश्चित करने के लिए कि हमने फाइल की गयी लाइनों को चेक किया है जब हमने इस लूप में चेक की गई फाइल का हिस्सा तिरछा नहीं किया है।