টি ব্যবহার করে ফাইল করার জন্য STDERR এবং STDOUT ক্যাপচার করা হচ্ছে


16

উভয় STDERRএবং STDOUTএকই ফাইল ব্যবহার করে ক্যাপচার করার জন্য সর্বোত্তম ক্রম কী তা আমি অস্পষ্ট tee। আমি জানি যে আমি যদি কোনও ফাইলে পাইপ করতে চাই তবে ফাইল হ্যান্ডেলটি পুনর্নির্দেশের পরে মানচিত্র করতে হবে, অর্থাৎ

find . >/tmp/output.txt 2>&1

এই পাঠাতে শেল নির্দেশ STDOUTকরার /tmp/output.txtএবং তারপর পাঠাতে STDERRকরার STDOUT(যা এখন পাঠাচ্ছে /tmp/output.txt)।

2>&1ফাইলটি পুনর্নির্দেশের আগে সম্পাদন করার চেষ্টা করা পছন্দসই প্রভাব ফেলবে না।

তবে আমি যখন পাইপ ব্যবহার করতে চাই তখন teeতা হওয়া উচিত:

find . |tee /tmp/output.txt 2>&1   # or
find . 2>&1 |tee /tmp/output.txt   # ?

উত্তর:


19

পরেরটি; এটি নিশ্চিত করে যে মূল কমান্ডের STDOUT এবং STDERR একই এফডিতে যাবে, তারপরে তাদের টিয়েতে যৌথভাবে ফিড দেয়। পূর্ববর্তী ক্ষেত্রে, এটি টি কমান্ডের STDERR হ'ল যে আপনি এর STDOUT এর সাথে যোগ দিচ্ছেন।


5
আকর্ষণীয়ভাবে বাশ ম্যান পৃষ্ঠাটি বলে, "যদি |&এটি ব্যবহার করা হয় তবে কমান্ড 1 এর স্ট্যান্ডার্ড ত্রুটিটি পাইপের মাধ্যমে কমান্ড 2 এর স্ট্যান্ডার্ড ইনপুটটির সাথে সংযুক্ত; এটি সংক্ষিপ্তরূপে 2>&1 |
পিপি

আমাকে একটি ছোট সি প্রোগ্রাম তৈরি করতে হয়েছিল যা এই সমস্যাটি বোঝার জন্য stderrএবং উভয়কেই লেখেন stdout। উভয় আউটপুট স্ট্রিম ক্যাপচার করার সময় পুনঃনির্দেশ >এবং টি |অপারেটরগুলি পৃথক হয়। পুনঃনির্দেশের জন্য আমাকে করতে হয়েছিল ./testapp > /tmp/out.log 2>&1। যদিও টিয়ের জন্য আমাকে করতে হয়েছিল ./testapp 2>&1 | tee /tmp/out.log
টাইপলজিক

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