আগের চাকরিতে, আমি কেবল কমান্ড-ফু দিয়ে একটি নির্ভরযোগ্য প্রহরী পেতে পারি নি, সুতরাং আমার নীচের মতো একটি মোড়ক স্ক্রিপ্ট ছিল, যা প্রতি পল_ডুগ্রেশন সেকেন্ডে ফাইলটি পরীক্ষা করে এবং আগ্রহী বাক্যাংশের জন্য নতুন লাইনগুলি গ্রিপ করে।
#!/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
নিশ্চিত করে তোলে যে ফাইলগুলি লাইন যুক্ত করা হয়েছে এটি পরীক্ষা করার পরে আমরা এটি পরীক্ষা করি না যে এই লুপটিতে ফাইলটির চেক হয়ে যায়।