বাশ স্ট্যাডআউট এবং স্টডার উভয় পাইপিং?


156

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

একই জিনিসটি অর্জন করার সহজ উপায় কী, তবে পরিবর্তে অন্য কমান্ডে পাইপিং করা?

উদাহরণস্বরূপ, এই লাইনে:

cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError

আমি স্টাডআউট এবং স্ট্ডার উভয়ই সামগ্রীতে গ্রিপটি মিলিয়ে দেখতে চাই (কার্যকরভাবে এগুলি একটি স্ট্রিমের সাথে সংযুক্ত করুন)।

দ্রষ্টব্য : এই প্রশ্নটি পাইপিং সম্পর্কে জিজ্ঞাসা করছে, পুনর্নির্দেশ নয় - সুতরাং এটি বর্তমানে এটির সদৃশ হিসাবে চিহ্নিত প্রশ্নের নকল নয়।


স্টাডআউট এবং স্টার্ডার উভয়কে পাইপ দেওয়ার সঠিক উপায়ের জন্য লিঙ্কযুক্ত প্রশ্নের দ্বিতীয় উত্তরটি ( স্ট্যাকওভারফ্লো.com / a / 637834 / 1129642 ) দেখুন । অন্য প্রশ্নের দরকার নেই।
Marki555

4
@ ট্রিপলি একটি সঠিক সদৃশ নয়, তাই না? পাইপ বনাম। ফাইল থেকে পুনঃনির্দেশ?
বেনিয়ামিন ডাব্লু।

@ বেঞ্জামিন ডাব্লুয়েলে কমপক্ষে একটি উত্তর আছে যা উভয় পরিস্থিতিতেই সমাধান করে, যদিও এটি গৃহীত উত্তর নয়। এটি একটি মোটামুটি সাধারণ প্রশ্ন তাই আমরা সম্ভবত আরও ভাল সদৃশ খুঁজে পেতে পারি, বা একজন মডারেটরকে এগুলিকে একীভূত করতে বলি - বা এমনকি সবচেয়ে খারাপ ক্ষেত্রেও এই বিষয়টির জন্য সম্পূর্ণ নতুন ক্যানোনিকাল তৈরি করতে। যদি আপনি আরও ভাল ডুপ পান তবে তা সর্বদা প্রস্তাব করুন। আগাম ধন্যবাদ.
ট্রিপলি

12
@ ট্রিপলি সলভেস, হ্যাঁ, তবে উত্তরের কোনওটিই |&শর্টকাট ব্যবহার করে না , যা আমি মনে করি " স্টাডআউট এবং স্টার্ডার উভয়কে পাইপকে পুনঃনির্দেশিত করার" সবচেয়ে সহজ সমাধান।
বেনিয়ামিন ডাব্লু।

3
এটি লিঙ্কযুক্ত প্রশ্নের সদৃশ নয় এবং এটি পরিষ্কার ছিল না যে মার্কোর উত্তর আমি যা চেয়েছিলাম তা করেছে। এছাড়াও, এটি উল্লেখ করে না | &। পুনরায় খুলতে ভোট।
মার্টিন বোনার

উত্তর:


163

(মনে রাখবেন যে কোনও পূর্ববর্তী বিদ্যমান ফাইলটিকে পুনর্নির্দেশ এবং ওভাররাইট করার সময় কোনও ফাইলে &>>file সংযোজন করা হয় ))&>

একত্রিত করতে stdoutএবং stderrআপনি পূর্বেরটি ব্যবহার করে পূর্বের দিকে পুনর্নির্দেশ করবেন 2>&1। এই স্ট্যাডার (ফাইল বর্ণনাকারী 2) কে স্টাডআউট (ফাইল বর্ণনাকারী 1) এ পুনঃনির্দেশ করে, যেমন:

$ { echo "stdout"; echo "stderr" 1>&2; } | grep -v std
stderr
$

stdoutstdout stderrযায়, stderr যায়। grepশুধুমাত্র দেখেন stdout, অত stderrটার্মিনালে ছাপে।

অন্য দিকে:

$ { echo "stdout"; echo "stderr" 1>&2; } 2>&1 | grep -v std
$

Stdout এবং stderr উভয়কে লেখার পরে, 2>&1stderr কে stdout এ পুনঃনির্দেশ করে এবং স্টিডিনে grepউভয় স্ট্রিং দেখায়, এইভাবে উভয় ফিল্টার আউট করে।

আপনি এখানে পুনঃনির্দেশ সম্পর্কে আরও পড়তে পারেন ।

আপনার উদাহরণ (পসিক্স) সম্পর্কিত:

cmd-doesnt-respect-difference-between-stdout-and-stderr 2>&1 | grep -i SomeError

বা, ব্যবহার করে >=bash-4:

cmd-doesnt-respect-difference-between-stdout-and-stderr |& grep -i SomeError

উপর স্পষ্টতার জন্য ধন্যবাদ &>>। আমি আমার প্রশ্ন সংশোধন করেছি।
অ্যান্ড্রু ফেরিয়ার

18
আমি আমার উত্তরে আপনার উদাহরণ যুক্ত করেছি, কেবলমাত্র যদি আমার দেওয়া উদাহরণগুলির ভিত্তিতে এটি সুস্পষ্ট না হয়। পার্শ্ব-নোট হিসাবে, আপনি এর |&পরিবর্তে ব্যাশ-নির্দিষ্ট ব্যবহার করতে পারেন 2>&1 |
অ্যাড্রিয়ান ফ্রাথর্থম

13
|&ভবিষ্যতের পাঠকদের জন্য @ অ্যাড্রিয়ানফ্রথাইথ দ্বারা প্রস্তাবিত শর্টকাট সম্পর্কে সাইড নোট : এই বৈশিষ্ট্যটি কেবলমাত্র bash4+ সংস্করণে সমর্থিত । আপনি যদি 3 বা নীচেরটি ব্যবহার করে থাকেন তবে আপনাকে আটকে থাকতে হবে 2>&1 |
টোমোকাফে

3
বাশ পুনঃনির্দেশ এখানে খুব ভালভাবে ব্যাখ্যা করা হয়েছে । @ অ্যাড্রিয়ানফ্রহার্থে একটি ভাল কাজ হয়েছে, লিঙ্কটি আটকানো আরও এগিয়ে গেছে। কখনও কখনও, আমি আশা করি অফিসিয়াল বাশ ডকুমেন্টেশনটি ভাল ছিল।
ডেভিড Andreoletti

112

ব্যাশ জন্য একটি সাঁটে লেখার হয়েছে 2>&1 |, যথা |&, যা পাইপ উভয় stdout- এ এবং দ্বারা stderr (দেখুন ম্যানুয়াল ):

cmd-doesnt-respect-difference-between-stdout-and-stderr |& grep -i SomeError

এটি বাশ ৪.০ এ প্রবর্তিত হয়েছিল, রিলিজ নোটগুলি দেখুন


সম্পূর্ণতার জন্য এটি যুক্ত করার জন্য ধন্যবাদ। আমি অন্যান্য উত্তরটি সঠিক রাখতে যাচ্ছি যেহেতু অনেক লোকেরা এখনও প্রাক -৪.০ ব্যবহার করছে ash তবে এটি দরকারী।
অ্যান্ড্রু ফেরিয়ার

9
সম্ভবত লক্ষণীয়ভাবে, ম্যাকসগুলিতে চালিত বাশগুলি এটি সমর্থন করার জন্য খুব পুরানো।
ফ্লাইম

@ ফ্লিম তবে জেডএসটি নেই
ট্রেন্টন

1
যেহেতু ksh ব্যবহার করে | এবং কপ্রোকের জন্য, এটি অপ্রয়োজনীয় শর্টহ্যান্ডের জন্য খারাপ পছন্দ বলে মনে হচ্ছে। আমি পরের লোকের মতো একটি স্ট্যাকের ডুপস এবং রিডাইরেকশনের সাথে লাইনগুলি দেখতে ঘৃণা করি তবে স্পষ্ট বলে কিছু বলার আছে .... এবং আমি দুঃখিত যে এই মন্তব্যে তেমন কিছু যুক্ত হয়নি। আমি কেবল একটি সহায়ক সহায়কটি হ্রাস না করেই শর্টহ্যান্ডের জন্য বিরক্তি প্রকাশ করতে চেয়েছিলাম, কারণ লোকেরা এটি দেখে ভাল। আমি এটি জানতাম না, তাই আমাকে সচেতন করার জন্য ধন্যবাদ।
পল হজস

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