এই গ্রেপ কমান্ডটি কেন কাজ করে না?


24

আমি যখন এই ফ্যাশনে গ্রেপ ব্যবহার করার চেষ্টা করি:

service --status-all | grep network

এটি grepকেবলমাত্র "নেটওয়ার্ক" স্ট্রিংয়ের মধ্যে সীমাবদ্ধ করার জন্য এটিতে পাইপ দেওয়া সত্ত্বেও এটি সমস্ত পরিষেবা তালিকাভুক্ত করে


ঘটনার পরে:

এই নিবন্ধটি লক্ষ্য করা গেছে যা ব্যাখ্যা করে যে কমান্ডটি কেন এইরকম আচরণ করে, আমি লিনাক্স সম্পর্কে এটি পছন্দ করি, সবসময়ই একটি ভাল কারণ থাকে তবে প্রয়োজনীয় স্বজ্ঞাত নয়

উত্তর:


41

চেষ্টা করুন:

service --status-all |& grep network

কমান্ড-লাইন অ্যাপ্লিকেশনগুলি স্ট্যান্ডার্ড আউট (স্টাডআউট) এবং স্ট্যান্ডার্ড ত্রুটি (স্টডার) হিসাবে পরিচিত দুটি পাঠ্য স্ট্রিমগুলিতে মুদ্রণ করতে পারে । ডিফল্টরূপে, টার্মিনালটি কেবল উভয়ের জন্য একইভাবে আউটপুট প্রদর্শন করে।

Stdout- এ 1 নম্বর দেওয়া হয়, এবং দ্বারা stderr সংখ্যা 2. দেওয়া হয় ডিফল্ট, ফেরৎ অপারেটর, মত >, |এবং <শুধুমাত্র stdout- এ, সংখ্যা 1 ক্ষেত্রে প্রযোজ্য।

|&পাইপ stdout এবং stderr উভয় একসাথে ডান এর স্ট্যান্ডার্ড ইনপুট (stdin) প্রবাহে প্রক্রিয়া, যা grepআপনার প্রত্যাশা অনুযায়ী কাজ করে।

আমি জানি না কেন service --status-allএখানে স্টাডারে মুদ্রণ করা হচ্ছে, তবে সাধারণভাবে, আলাদা স্টাডার স্ট্রিম থাকা খুব দরকারী, কারণ এটি আপনাকে স্টাডাউট নিঃশব্দ করার পরেও ত্রুটিগুলি দেখতে দেয়।


উত্তরের জন্য ধন্যবাদ, মনে হচ্ছে এটি অনেক আগ্রহ তৈরি করেছে। সুতরাং আমি অনুমান করি যে এই সমস্যাটি নিয়ে আমি একমাত্র ছিলাম না।
মিয়ার বার্গ

4

আপনাকে স্ট্যান্ডার্ড ত্রুটি স্ট্রিম ( 2) কে স্ট্যান্ডার্ড আউটপুট ( 1) এ পুনঃনির্দেশ করতে হবে :

service --status-all 2>&1 | grep network

অপারেটর >সাধারণত ফাইল (যেমন 2>/tmp/file) গুলিতে পুনঃনির্দেশ করে । বর্ণনাকারী ব্যবহার করে অন্য স্ট্রিমে পুনর্নির্দেশের জন্য , এটির আগে হওয়া প্রয়োজন &(অক্ষরের মধ্যে কোনও ফাঁকা স্থান নোট করুন)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.