কখনও কখনও আপনি উভয় stdout পুনঃনির্দেশিত করতে চান এবং একই অবস্থানে stderr, এই যখন >&
ব্যবহৃত হয় - এটি অন্য একটি ফাইল বর্ণনাকারী নির্দেশ করে।
উদাহরণস্বরূপ, যদি আপনি একই ফাইলটিতে stdout এবং stderr উভয় লিখতে চান (এটি হতে /dev/null
অথবা output.txt
), আপনি, আলাদাভাবে তাদের পুনঃনির্দেশিত করতে পারেন
app 1>/dev/null 2>/dev/null
অথবা আপনি ফাইলটিতে একটি ফাইল বর্ণনাকারীকে পুনঃনির্দেশিত করতে পারেন এবং অন্য ফাইলের বর্ণনাকারীকে প্রথমটিতে পুনঃনির্দেশিত করতে পারেন:
app 1>/dev/null 2>&1
app 2>/dev/null 1>&2
প্রথম উদাহরণে, 2>&1
পয়েন্ট ফাইল বর্ণনাকারী # 2 যেখানে # 1 ইতিমধ্যে নির্দেশ করছে। দ্বিতীয় উদাহরণ একই অর্জন, পরিবর্তে stderr পরিবর্তে।
অন্য উদাহরণ হিসাবে, স্টুডাউট (ফাইল বর্ণনাকারী # 1) ইতোমধ্যে পছন্দসই অবস্থানে ইঙ্গিত দিচ্ছে এমন ক্ষেত্রে এমন কিছু ঘটনা রয়েছে, তবে আপনি এটি নাম অনুসারে উল্লেখ করতে পারবেন না (এটি একটি পাইপ, একটি সকেট, বা এর সাথে যুক্ত হতে পারে)। প্রক্রিয়া সম্প্রসারণ (যখন ` `
অথবা $( )
অপারেটর), যা সাধারণত স্টডাউটকে কেবলমাত্র ক্যাপচার করে তবে আপনি এটিতে স্টেডার অন্তর্ভুক্ত করতে চাইতে পারেন। এই ক্ষেত্রে, আপনি ব্যবহার করতে হবে >&
stderout stdout নির্দেশ করতে:
out=$(app 2>&1)
আরেকটি সাধারণ উদাহরণ একটি পেজার, বা grep
, পাইপ থেকে, বা অনুরূপ উপযোগ |
সাধারণত stdout এ শুধুমাত্র কাজ করে, আপনি পাইপ ব্যবহার করার আগে stderr stdout এ পুনঃনির্দেশিত করবেন:
app 2>&1 | grep hello
কিভাবে জানতে হবে 2>&1
অথবা 1>&2
সঠিক? দ্য ইতিমধ্যে সেট আপ ফাইল বর্ণনাকারী অধিকার যায় >&
, এবং আপনি ফাইল পুনর্নির্দেশ করতে চান ফাইল descriptor বাম যায়। ( 2>&1
মানে "বিন্দু ফাইল বর্ণনাকারী # 2 ফাইল বর্ণনাকারী ফাইল # 1"।)
কিছু শেলগুলিতে সাধারণ পুনঃনির্দেশনার জন্য শর্টকাট রয়েছে; এখানে বাশ থেকে উদাহরণ:
1>
শুধু সংক্ষিপ্ত হতে পারে >
1>foo 2>&1
থেকে >&foo
অথবা &>foo
2>&1 | program
থেকে |& program
app 1>/dev/null 2>&1
এর অর্থ হ'ল 2 & gt; 1 ফাইলটি নির্দেশ করবে যে 1 টি ইতিমধ্যে পুনঃনির্দেশিত হচ্ছে। আমি এটা সহজেই সহজেই করতে পারিapp > /dev/null &>
?