কিছু লিনাক্স প্রোগ্রামের আউটপুট কেন STDOUT বা STDERR- তে যায় না?
আসলে, আমি কীভাবে 'স্ট্রিম' এটি ব্যবহার করি না কেন, সমস্ত প্রোগ্রাম আউটপুটকে কীভাবে নির্ভরযোগ্যভাবে ক্যাপচার করতে হয় তা জানতে চাই। আমার সমস্যাটি হ'ল কিছু প্রোগ্রাম তাদের আউটপুট ক্যাপচার হতে দেয় বলে মনে হয় না।
একটি উদাহরণ 'সময়' আদেশ:
time sleep 1 2>&1 > /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
অথবা
time sleep 1 &> /dev/null
real 0m1.003s
user 0m0.000s
sys 0m0.000s
কেন আমি উভয় বার আউটপুট দেখতে পাচ্ছি? আমি প্রত্যাশা করেছি যে এগুলি সবগুলি / dev / নালায় ফেলে দেওয়া হবে ।
কোন আউটপুট স্ট্রিমটি সময় ব্যবহার করছে এবং আমি কীভাবে এটি একটি ফাইলে পাইপ করতে পারি?
সমস্যাটি ঘিরে কাজ করার একটি উপায় হ'ল বাশ স্ক্রিপ্ট তৈরি করা , উদাহরণস্বরূপ, combine.sh
এই আদেশটি সহ:
$@ 2>&1
তারপরে 'সময়' এর আউটপুট সঠিক উপায়ে ক্যাপচার করা যায়:
combine.sh time sleep 1 &> /dev/null
(কোনও আউটপুট দেখা যায় না - সঠিক)
পৃথক কম্বাইন স্ক্রিপ্ট ব্যবহার না করে যা চাই তা অর্জন করার কোনও উপায় আছে?
2>&1 > /dev/null
অর্থ "2 এখন 1 যেখানে যায় (যেমন, টার্মিনালটি ডিফল্টরূপে), এবং তারপরে 1 এখন / dev / নাল যায় (তবে 2 এখনও টার্মিনালে যায়!)>/dev/null 2>&1
বলতে ব্যবহার করুন "1 এখন / দেব / নাল যায়, তারপরে 2 যায় যেখানে 1 যায় (অর্থাত্ / দেব / নালও যায়)। এটি এখনও এখানে কাজ করবে না কারণ অন্তর্নির্মিত 'সময়' পুনঃনির্দেশিত হবে না, তবে আরও সাধারণভাবে সঠিক (উদাহরণস্বরূপ আপনি / usr / bin / সময় ব্যবহার করলে এটি কাজ করবে)। "2> & 1" সম্পর্কে 1 এর "দিকনির্দেশ" কে 2 তে অনুলিপি হিসাবে ভাবুন, 2 তে 1 তে যাচ্ছেন না