एक और शुक्रवार का स्वागत है ...
टर्मिनल का एक छोटा सा हिस्सा जानने का समय आ गया है। बहुत सोचने के बाद मैंने इस बारे में एक पोस्ट बनाने का फैसला किया मानक धाराएँ; हालांकि यह सतही होगा, मुझे लगता है कि यह एक ऐसी चीज है जिसे हर किसी को जानना चाहिए।
मानक स्ट्रीम
मानक स्ट्रीम यह उपयोगकर्ता और टर्मिनल के बीच कई संचार चैनलों से बना है। ये इनपुट / आउटपुट "चैनल" एक कमांड निष्पादित होने पर जानकारी प्रदर्शित या कैप्चर करते हैं।
3 I / O कनेक्शन हैं: stdin मानक इनपुट, stdout मानक उत्पादन, stderr मानक त्रुटि.
स्टडिन: मानक इनपुट
मानक इनपुट वह तरीका है जिसमें हम किसी कमांड से पाइप, रीडायरेक्शन, कीबोर्ड आदि के माध्यम से जानकारी कैप्चर करते हैं। हम इसे फ़ाइल डिस्क्रिप्टर 0 से पहचानते हैं।
स्टडिन का एक उदाहरण होगा:
क्रमबद्ध करें <लिस्टिंग
यह सूची में मौजूद सभी जानकारी लेता है - इस मामले में संख्याओं को यादृच्छिक रूप से लिखा जाता है - और जब फ़ाइल को ls कमांड पर पुनर्निर्देशित किया जाता है, तो यह संख्यात्मक सूची को वर्णानुक्रम में सॉर्ट करता है। इस उदाहरण में झंडे निहित हैं।
stdout: मानक आउटपुट
मानक आउटपुट, जैसा कि इसके नाम का अर्थ है, कंसोल के माध्यम से एक कमांड के आउटपुट को प्रदर्शित करता है। यदि हम सभी सूचनाओं को लिखते हैं जो यह हमें स्क्रीन पर दिखाती है कि मानक आउटपुट है। यह वर्णनकर्ता 1 द्वारा दर्शाया गया है।
अब मैं स्टड और स्टडआउट को बैश में लिखी एक स्क्रिप्ट के साथ, सिर्फ इसलिए कि मैं बैश हाहा से प्यार करता हूँ, की कोशिश करूँगा। 🙂
परीक्षण.श
#! / बिन / बैश अगर [-t ०]; तब प्रतिध्वनि "आप stdout का उपयोग कर रहे हैं" elif [-t 0]; फिर इको "आप स्टडिन का उपयोग कर रहे हैं" इको "क्रूर त्रुटि" की प्रतिध्वनि करें
अब एक स्क्रीनशॉट जो स्क्रिप्ट का उपयोग करने का तरीका दर्शाता है। जब स्क्रिप्ट के उपयोग के साथ एक पाइप को पुनर्निर्देशित या उपयोग किया जाता है परीक्षण -t यह जानने के लिए कि क्या केवल स्टडआउट स्क्रिप्ट निष्पादित की गई है, और यदि नहीं तो यह स्पष्ट रूप से स्टडिन है।
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
याद रखें कमांड को संशोधित करें और अभ्यास करें ताकि आप सीखें।
stderr: मानक त्रुटि
मानक त्रुटि वह तरीका है जिससे प्रोग्राम त्रुटियां या निदान प्रदर्शित करते हैं। यह वर्णनकर्ता 2 द्वारा दर्शाया गया है।
अवधारणा को समझने के लिए, यह स्थिति है: जब हम एक कमांड से एक त्रुटि को बचाना चाहते हैं, तो पहली चीज जो हम सोचते हैं कि वह आउटपुट को सादे पाठ पर पुनर्निर्देशित करना है।
ls> info.txt
यह काम करेगा, कमांड की जानकारी एक सादे पाठ फ़ाइल में संग्रहीत की जाएगी। लेकिन त्रुटि को सहेजते समय, यह इसे संग्रहीत नहीं करता है, लेकिन इसे स्क्रीन पर दिखाता है और सादा पाठ फ़ाइल खाली है।
इसके बजाय अगर हम फ़ाइल में stderr को बचाने के लिए 2> का उपयोग करते हैं:
ls foo 2> info.txt
अब यह टेक्स्ट फाइल में एरर की जानकारी सेव करेगा।
अधिकांश खोल Stderr और stdout को एक एकल कमांड कमांड में &> जहां Foo एक गैर-मौजूद निर्देशिका है, के साथ संग्रहीत करने की अनुमति दें
ls डाउनलोड Foo &> info.txt
इस फ़ाइल में Foo में ls निष्पादित करते समय त्रुटि की जानकारी होगी और डाउनलोड के तहत निर्देशिकाओं को सूचीबद्ध करेगा।
और अंत में, वह प्रसिद्ध क्या करता है 2> और 1?
स्टडआउट के लिए सरल, पुनर्निर्देशित स्टेडर। वह और> और 1 के मध्य में इसका मतलब है कि यह स्टडआउट पर पुनर्निर्देशित करेगा। यदि यह नहीं होता, तो यह कुछ इस तरह होता ... "त्रुटि को फ़ाइल 1 पर पुनर्निर्देशित करें"।
और इसके साथ पुनर्निर्देशित करना संभव है:
- एक फ़ाइल के लिए stdout
- एक फ़ाइल के लिए stderr
- stdout to stderr
- stdr to stdout
- stderr और एक फ़ाइल के लिए stdout
- दूसरों के बीच में
यह आज के लोगों के लिए है। हम पढ़ते हैं और आपको रोकने के लिए धन्यवाद देते हैं। 😀
दिलचस्प है। आपके ट्यूटोरियल के लिए धन्यवाद, मैं बैश को बहुत अधिक पसंद कर रहा हूं।
प्रिय, दिलचस्प है, हालांकि आपको निम्नलिखित पंक्ति में एक त्रुटि है:
"और जब फ़ाइल को ls कमांड पर पुनर्निर्देशित किया जा रहा है", तो यह होना चाहिए "और जब फ़ाइल को सॉर्ट कमांड पर पुनर्निर्देशित किया जाए"।
एक ग्रीटिंग.
पाठ की शुरुआत में एक त्रुटि है, जब आप कमांड "ls" इंगित करते हैं, तो यह "सॉर्ट" होना चाहिए:
"सूची में है कि सभी जानकारी ले लो, इस मामले में संख्या बेतरतीब ढंग से लिखा है-, और फ़ाइल को ls कमांड पर पुनः निर्देशित करें (यहां यह क्रमबद्ध होगा)"
अपने काम को साझा करने के लिए बधाई और धन्यवाद
यह क्रोन के लिए बहुत अच्छा है, जहां आप चाहते हैं कि आउटपुट को फ्लश किया जाए (/ देव / नल) लेकिन फ़ाइलों में संग्रहीत की जाने वाली त्रुटियां। इसके अलावा, जब मैं ऐसा करता हूं, तो मैं आमतौर पर तारीख कमांड का उपयोग करता हूं ताकि वे विफल हो सकें।
बैश (श) में ये उपकरण यूनिक्स दर्शन द्वारा विकसित किए गए हैं "एक काम करो, और इसे अच्छी तरह से करो"
खैर, मुझे कुछ पता नहीं चला है
हहा अच्छी तरह से यह काफी अच्छी तरह से समझाया गया है, आप क्या नहीं समझे हैं?