आपको 2> और 1 पुनर्निर्देशन के लिए सिंटैक्स कैसे याद है [बंद]


12

क्या आपके पास एक महामारी या प्रणाली है? इसने मुझे वर्षों तक परेशान किया है मुझे हमेशा इसे देखना पड़ता है

जवाबों:


19

यदि आप एक सी प्रोग्रामर हैं, तो आप &1"1 का पता" के रूप में सोच सकते हैं, इसलिए 2>&1# 2 रीडायरेक्ट फ़ाइल डिस्क्रिप्टर # 2 को उसी स्थान पर # 1 के रूप में पढ़ता है।


पता नहीं अगर यह मदद करता है ... Mnemonics काफी एक व्यक्तिगत सामान हैं।
लेगगेट

+12 यह भी सही विवरण है कि क्या हो रहा है।
स्टीफन चेज़लस

1
मुझे आश्चर्य है कि जब यह आविष्कार किया गया था ("1 का पता") के बारे में कैसे सोचा गया था। जब कुछ लोगों ने सी भाषा और यूनिक्स दोनों का बहुत बड़ा योगदान दिया था जब उनका आविष्कार किया गया था, यह संभव है
लैगेटगेट

1
मैं इसके बजाय इसका इस्तेमाल करना शुरू कर सकता हूं;)
सुनहरी जुगल

3

"टू टू एंड वन" ("टू" >) "टू एंड वन" की तुलना में मेरे लिए अधिक तार्किक अर्थ रखता है, जो कि मैं आमतौर पर इससे भ्रमित हो सकता हूं। यदि आप "और एक" को एक संज्ञा (एक स्थान) के रूप में मानते हैं, तो यह संदर्भ में व्याकरणिक अर्थ भी बताता है, जो "दो और एक" के साथ करना मुश्किल है - आपको "एक से एक" पर विचार करना होगा संज्ञा, और यह अभी भी प्रासंगिक अर्थ नहीं होगा।


2
मुझे समझ में नहीं आता
मैट

2

महामारी नहीं है, लेकिन मैं इसे इस प्रकार पढ़ता हूं:

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

जब आप लिखते हैं 2>&1, तो आप कह रहे हैं "मानक त्रुटि मानक आउटपुट पर जाती है"।

चलो कि नीचे तोड़ो।

पहले आप यह याद रखना चाहते हैं कि मानक त्रुटि है 2और मानक आउटपुट है 1

तो आपको 2कुछ न कुछ मिला है 1

"जाता है" लिखा है >

तो आपको कुछ मिला 2>है 1

2>filenameका अर्थ है मानक त्रुटि भेजना filename। लेकिन आप इसे फ़ाइल नामक फ़ाइल में नहीं भेजना चाहते 1। आप कुछ और चाहते हैं: एक फ़ाइल की संख्या जो पहले से खुली है। जो है उसके लिए &है।

तो 2>&1

आप यह भी सोच सकते हैं जैसे आप एक असाइनमेंट कर रहे थे, जहां >एक बराबरी की तरह है और एक &की तरह है $, तुलना करें:

f=$1
2>&1

कई पुनर्निर्देशन के साथ एक कमांड लाइन को समझने के लिए, यह जानना महत्वपूर्ण है कि पुनर्निर्देशन को दाएं से बाएं किया जाता है। उस बारे में अधिक जानकारी के लिए पुनर्निर्देशन का आदेश देखें ।


0

मुझे याद आया कि यह हमेशा 2 है -> 1. Stdr to stdout।

मध्य भाग हमेशा कठिन होता है और मैंने हमेशा इसे गड़बड़ कर दिया है, जब तक मुझे याद नहीं है कि पहले तेज चरित्र आता है >, तब मैं वास्तविक जीवन में नहीं लिख सकता &

तो कभी नहीं 2&>1, हमेशा2>&1


0

यदि आप समझते हैं कि FD2 STDERR है, तो आप सोच सकते हैं, "ओह, और STDERR पर कब्जा करें जहां कभी भी मैं STDOUT (FD1) भेजता हूं"।


0

मेरे सहकर्मियों और मैं आम तौर पर कहते हैं कि "दो एक से अधिक है", क्योंकि हम में से ज्यादातर हमेशा याद नहीं है कि stderrफ़ाइल की जानकारी देता है 2और stdoutहै 1(विशेष रूप से उन यूनिक्स / लिनक्स के लिए नए), तो पुन: निर्देशित हो के बारे में अन्य स्मृति सहायकों stderrवास्तव में काम नहीं करते । केवल समस्या है, आपको अभी भी याद रखना है कि एम्परसैंड कहाँ जाता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.