কীভাবে কমান্ড / প্রোগ্রামগুলির পাইপযুক্ত চেইন সহ ওয়াচ কমান্ডটি ব্যবহার করবেন


51

আমি সাধারণত watchলিনাক্স ইউটিলিটি প্রতি এন সেকেন্ডে বার বার একটি কমান্ডের আউটপুট দেখতে দেখতে ব্যবহার করিwatch df -h /some_volume/

তবে আমি watchপাইপযুক্ত সিরিজের মতো কমান্ডের মতো কমান্ডটি ব্যবহার করতে সক্ষম হবে বলে মনে হচ্ছে না :

$ watch ls -ltr|tail -n 1

আমি যদি এটি করি watchতবে সত্যই পর্যবেক্ষণ ls -ltrকরা হচ্ছে এবং আউটপুটটি পাস হচ্ছে tail -n 1যা কিছুই আউটপুট দেয় না।

যদি আমি এটি চেষ্টা করি:

$ watch (ls -ltr|tail -n 1)

আমি পাই

$ watch: syntax error near unexpected token `ls'

এবং নিম্নলিখিতগুলির যে কোনও একটি কারণে বা অন্য কোনও কারণে ব্যর্থ হয়:

$ watch <(ls -ltr|tail -n 1)

$ watch < <(ls -ltr|tail -n 1)

$ watch $(ls -ltr|tail -n 1)

$ watch `ls -ltr|tail -n 1)`

এবং অবশেষে যদি এটি করেন:

$ watch echo $(ls -ltr|tail -n 1)

আমি প্রদত্ত বিরতিতে আউটপুটে কোনও পরিবর্তন দেখতে পাচ্ছি না কারণ ভিতরে কমান্ডটি $()কেবল একবার চালানো হয় এবং ফলস্বরূপ আউটপুট স্ট্রিংটি সর্বদা আক্ষরিক হিসাবে মুদ্রিত হয় ("দেখেছি")।

সুতরাং, আমি কীভাবে watchকমান্ডকে পাইপযুক্ত কমান্ডগুলির শৃঙ্খলা [অন্য যে এগুলি একটি স্ক্রিপ্টের ভিতরে রাখছি] দিয়ে কাজ করব?


দৌড়াতে man watchএবং উদাহরণগুলিতে স্ক্রোল করুন ...
don_crissti

উত্তর:


82
watch 'command | othertool | yet-another-tool'

1
জেনেরিক পদ্ধতির বিষয়টি লক্ষ্য করার মতো, watch sh -c 'command | etc'বিশেষত প্রশ্নে চেষ্টা করা পদ্ধতির দিকে নজর রাখা উচিত।
সোর্সজেডি

@ সোর্সজেডি আমি সত্যিই বুঝতে পারি নি কেন, তবে এটি সর্বদা একই ফলাফল প্রকাশ করে না।
মাইকেল মায়ার


2

আপনি যদি সাব-ডাইরেক্টরিগুলিতেও সমস্ত ফাইল তালিকাবদ্ধ করতে চান তবে এক্সিকিউশন অপশন সহ ফাইন্ড কমান্ড ব্যবহার করতে পারেন।

watchপ্রতি 30 সেকেন্ডে আপডেট findহবে এবং বর্তমান দিরের সমস্ত * .লগ ফাইল অনুসন্ধান করবে (অন্তর্ভুক্ত সাবডিয়ারস) এবং ফাইলের নাম এবং তাদের শেষ 10 লাইন মুদ্রণ করবে:

watch -n30 'find . -name "*.log" -print -exec tail -n10 {} \; '
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.