আমি ভেবেছিলাম ইউএনআইএক্স-এ সমস্ত কিছু দেখেছি। এই প্রশ্নটি আমাকে আমার স্মাগনেস থেকে সরিয়ে দিয়েছে। কি দুর্দান্ত প্রশ্ন!
tail
শেষ এক্স লাইন প্রদর্শন করে। tail -f
একই কাজ করে তবে মূলত অসীম লুপে: প্রারম্ভকালে, ফাইলের শেষ এক্স লাইনগুলি দেখান, তারপরে কিছু ওএস যাদু (ইনোটিফাইয়ের মতো) ব্যবহার করে মনিটরিং করুন এবং নতুন লাইন দেখান show
এর কাজটি করতে, tail
অবশ্যই ফাইলের শেষটি সনাক্ত করতে সক্ষম হতে হবে। যদি tail
ফাইলটির শেষ সন্ধান না করে তবে এটি সর্বশেষ এক্স লাইনগুলি প্রদর্শন করতে পারে না, কারণ "শেষ" অপরিজ্ঞাত। সুতরাং tail
এই ক্ষেত্রে কি করে ? এটি ফাইলটির শেষ না পাওয়া পর্যন্ত অপেক্ষা করে।
এই বিবেচনা:
$ chatter() { while :; do date; sleep 1; done; }
$ chatter | tail -f
এটি কখনই অগ্রগতি করে বলে মনে হয় না কারণ এখান থেকে ফাইলের কোনও নির্দিষ্ট শেষ হয় না chatter
।
আপনি যদি tail
কোনও ফাইল সিস্টেম পাইপ থেকে শেষ লাইনগুলি দিতে বলেন তবে আপনি একই আচরণ পান। বিবেচনা:
$ mkfifo test.pipe
$ tail test.pipe
stdbuf
অনুভূত সমস্যাটি সমাধানের জন্য একটি মহৎ প্রচেষ্টা ছিল। যদিও মূল ঘটনাটি হ'ল আই / ও বাফারিং এর মূল কারণ নয়: ফাইলের একটি নির্দিষ্ট শেষের অভাব। আপনি যদি পুচ্ছের সূত্রের কোডটি পরীক্ষা করে দেখেন তবে file_lines
ফাংশন মন্তব্যটি পড়তে হবে:
END_POS হল ইওএফের ফাইল অফসেট (শেষ বাইটের অফসেটের চেয়ে একটি বড়)।
এবং এটি যাদু। যে কোনও কনফিগারেশনে লেজের জন্য আপনার ফাইলটির শেষের প্রয়োজন need head
এই সীমাবদ্ধতা নেই, এটি কেবল ফাইলের একটি সূচনা প্রয়োজন (যা এটি নাও থাকতে পারে, চেষ্টা করুন head test.pipe
)। স্ট্রিমমুখী সরঞ্জামগুলির মতো sed
এবং awk
ফাইলের শুরু বা শেষের প্রয়োজন নেই: এগুলি বাফারগুলিতে কাজ করে।