जवाबों:
यदि आप एक सी प्रोग्रामर हैं, तो आप &1"1 का पता" के रूप में सोच सकते हैं, इसलिए 2>&1# 2 रीडायरेक्ट फ़ाइल डिस्क्रिप्टर # 2 को उसी स्थान पर # 1 के रूप में पढ़ता है।
"टू टू एंड वन" ("टू" >) "टू एंड वन" की तुलना में मेरे लिए अधिक तार्किक अर्थ रखता है, जो कि मैं आमतौर पर इससे भ्रमित हो सकता हूं। यदि आप "और एक" को एक संज्ञा (एक स्थान) के रूप में मानते हैं, तो यह संदर्भ में व्याकरणिक अर्थ भी बताता है, जो "दो और एक" के साथ करना मुश्किल है - आपको "एक से एक" पर विचार करना होगा संज्ञा, और यह अभी भी प्रासंगिक अर्थ नहीं होगा।
महामारी नहीं है, लेकिन मैं इसे इस प्रकार पढ़ता हूं:
0स्टडिन है।
1स्टडआउट है।
2stderr है।
>में है।
<से बाहर है
&फ़ाइल डिस्क्रिप्टर (कुछ गोले में) है।
2>&1
2 > & 1
stderr into file descriptor 1
redirect stderr into stdout
यह बदल सकता है यदि आपने पुनर्निर्देशन से पहले किसी भी फ़ाइल डिस्क्रिप्टर के साथ गड़बड़ की है ...
2>somefile 1>&2
2 > somefile 1 > &2
stderr into somefile and stdout into file descriptor 2
redirect stderr into somefile and stdout into somefile.
जब आप लिखते हैं 2>&1, तो आप कह रहे हैं "मानक त्रुटि मानक आउटपुट पर जाती है"।
चलो कि नीचे तोड़ो।
पहले आप यह याद रखना चाहते हैं कि मानक त्रुटि है 2और मानक आउटपुट है 1।
तो आपको 2कुछ न कुछ मिला है 1।
"जाता है" लिखा है >।
तो आपको कुछ मिला 2>है 1।
2>filenameका अर्थ है मानक त्रुटि भेजना filename। लेकिन आप इसे फ़ाइल नामक फ़ाइल में नहीं भेजना चाहते 1। आप कुछ और चाहते हैं: एक फ़ाइल की संख्या जो पहले से खुली है। जो है उसके लिए &है।
तो 2>&1।
आप यह भी सोच सकते हैं जैसे आप एक असाइनमेंट कर रहे थे, जहां >एक बराबरी की तरह है और एक &की तरह है $, तुलना करें:
f=$1
2>&1
कई पुनर्निर्देशन के साथ एक कमांड लाइन को समझने के लिए, यह जानना महत्वपूर्ण है कि पुनर्निर्देशन को दाएं से बाएं किया जाता है। उस बारे में अधिक जानकारी के लिए पुनर्निर्देशन का आदेश देखें ।
यदि आप समझते हैं कि FD2 STDERR है, तो आप सोच सकते हैं, "ओह, और STDERR पर कब्जा करें जहां कभी भी मैं STDOUT (FD1) भेजता हूं"।
मेरे सहकर्मियों और मैं आम तौर पर कहते हैं कि "दो एक से अधिक है", क्योंकि हम में से ज्यादातर हमेशा याद नहीं है कि stderrफ़ाइल की जानकारी देता है 2और stdoutहै 1(विशेष रूप से उन यूनिक्स / लिनक्स के लिए नए), तो पुन: निर्देशित हो के बारे में अन्य स्मृति सहायकों stderrवास्तव में काम नहीं करते । केवल समस्या है, आपको अभी भी याद रखना है कि एम्परसैंड कहाँ जाता है!