কেন এইভাবে STDERR কে / dev / null এ পুনঃনির্দেশ করা হচ্ছে?


29

এটি আমার কাছে অর্থবোধ করে না।

wibble > /dev/null 2>&1

আমি মনে করি এটি যদি এমন কিছু হত তবে এটি আরও অর্থবোধ করবে:

wibble 2>&1 > /dev/null

অন্য কথায়

Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null

কমান্ড পুনর্নির্দেশের আদেশের পিছনে কী চিন্তাভাবনা xxx > /dev/null 2>1?


6
আপনি এই ব্যাখ্যাটি দরকারী হিসাবেও পেতে পারেন ।
রোজিট্রিজেভিয়াচজ

ধন্যবাদ @rozcietzewiacz যে আসলে ঠিক আমার প্রশ্ন ব্যাখ্যা
whoami

1
গ্রেগের উইকির সেই পৃষ্ঠার মাঝখানে একটি দুর্দান্ত উত্তরণ রয়েছে : "আপনি যদি এখনও এই মুহুর্তে বিভ্রান্ত হন তবে সম্ভবত এফডি কীভাবে কাজ করে সে সম্পর্কে আপনি একটি ভুল ধারণা দিয়ে শুরু করেছিলেন এবং আপনি সেই ভুল ধারণাটি ফেলে দিতে সক্ষম হননি because এখনো. চিন্তা করবেন না - এটি একটি অত্যন্ত সাধারণ ভুল ধারণা এবং আপনি একা নন। … অনেক লোক মনে করেন যে 2>&1কোনওভাবে দুটি এফডি'কে "একত্রিত করে" বা "একত্রিত" করে বা "বিবাহ" করে, যার ফলে [পরবর্তীকালে] যে কোনও একটিতে অন্যটিতে পরিবর্তন হয়ে যায়। এই ক্ষেত্রে নয়। "
জি-ম্যান বলেছেন 'পুনর্বহাল মনিকা'

উত্তর:


41

পুনঃনির্দেশগুলি বাম থেকে ডানে প্রক্রিয়া করা হয়। যদি তুমি করো

2>&1 1> /dev/null

প্রথম পুনর্নির্দেশটি stderrসেই সময়ে প্রবাহকে নির্দেশ করে stdout(যা মূলত আপনার টিটি)। এটির stderrএকটি উপনাম তৈরি হয় না stdout

তারপরে stdoutবিট বালতিতে পুনঃনির্দেশিত করা হয়। stdoutপুনর্নির্দেশ পূর্ববর্তী কোনো প্রভাব পড়ে না stderrপুনর্নির্দেশ। stderrএখনও আপনার tty বোঝায়।

তাই:

ls file_that_doesnt_exist 2>&1 1> /dev/null

আপনার টার্মিনালে কেবল ত্রুটি বার্তা প্রিন্ট করবে।

bashফেরৎ ডকুমেন্টেশন পৃষ্ঠাটি এই স্পষ্টভাবে উল্লেখ:

লক্ষ্য করুন যে পুনর্নির্দেশগুলির ক্রমটি তাৎপর্যপূর্ণ। উদাহরণস্বরূপ, কমান্ড

          ls > dirlist 2>&1

কমান্ড চলাকালীন ফাইল চালককে স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয়ই নির্দেশ করে

          ls 2>&1 > dirlist

ডার্লিস্ট ফাইল করার জন্য কেবলমাত্র স্ট্যান্ডার্ড আউটপুটকে নির্দেশ দেয় কারণ স্ট্যান্ডার্ড আউটপুটটি ডার্লিস্টে পুনঃনির্দেশের আগে স্ট্যান্ডার্ড আউটপুটটি স্ট্যান্ডার্ড আউটপুট থেকে নকল করা হয়েছিল


3
হ্যাঁ আমার ছাঁটাই সমাধান করে। আমি এখনও যৌক্তিকভাবে এর বিভ্রান্তি মনে করি। তবে আমি একই পৃষ্ঠায় অন্য একটি অংশ পেয়েছি যা আকর্ষণীয় &>/dev/nullএটি শব্দার্থগতভাবে সমান/dev/null 2>&1
হোয়ামি

1
এটির উপর জোর দেওয়া উচিত যে আপনি যে পৃষ্ঠার কথা বলছেন তা বাশ রেফারেন্স ম্যানুয়ালটির অংশ । এটি স্পষ্টতই ব্যাশের বর্ণনা দেয় । পৃথিবীতে অন্যান্য শাঁস রয়েছে, বাশ থেকে আলাদা এবং &>এবং >&(যখন প্রসঙ্গে 2>&1বা যখন ব্যবহার হয় না >&2) বাশ-ইসেমস এবং মানক নয় । এগুলি শেল স্ক্রিপ্টগুলিতে ব্যবহার করা উচিত নয় যা আপনি পোর্টেবল হতে চান।
জি-ম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.