Linux/Bash शेल में तीन डेटा स्ट्रीम हैं जिन्हें आप कमांड निष्पादित करते समय टैप कर सकते हैं - stdin , स्टडआउट, और stderr . यहां उनका उपयोग करने का तरीका बताया गया है।
स्टडिन , स्टडआउट , stderr कंसोल में टेक्स्ट प्रदर्शित करने की अनुमति दें, और प्रत्येक स्ट्रीम के आउटपुट होने वाले डेटा को अन्य प्रोग्रामों में निर्देशित किया जा सकता है।
इन्हें मानक स्ट्रीम . कहा जाता है ।
स्टडिन क्या है (मानक इनपुट)?
टेक्स्ट इनपुट स्ट्रीम।
एप्लिकेशन stdin . के माध्यम से टेक्स्ट स्वीकार कर सकते हैं इनपुट के रूप में।
क्या है स्टडआउट (मानक आउटपुट)?
किसी प्रोग्राम का टेक्स्ट आउटपुट स्ट्रीम।
एप्लिकेशन stdout . के माध्यम से अन्य प्रोग्रामों (या देखने के लिए कंसोल पर) को डेटा भेजते हैं ।
stderr (मानक त्रुटि) क्या है?
किसी प्रोग्राम की टेक्स्ट त्रुटि आउटपुट स्ट्रीम।
यदि किसी प्रोग्राम में कोई त्रुटि आती है, तो उसे stdout के माध्यम से त्रुटि के संबंध में डेटा भेजना चाहिए धारा।
…हाँ, लेकिन इसका वास्तव में क्या मतलब है?
एक कंप्यूटर प्रोग्राम इनपुट और आउटपुट डेटा के साथ काम करता है - उदाहरण के लिए, एक प्रोग्राम गणित के समीकरण को स्वीकार कर सकता है और इसका समाधान प्रदान कर सकता है।
आपको कार्यक्रम में समीकरण प्राप्त करने का एक तरीका और कार्यक्रम से उत्तर प्राप्त करने का एक तरीका चाहिए। आप यह भी जानना चाहते हैं कि क्या समीकरण सुलझने योग्य नहीं था, इसलिए आप किसी भी अन्य OUTPUT से अलग उत्पन्न हुई कोई भी त्रुटि देखना चाहते हैं।
वह है स्टडिन , स्टडआउट , और stderr ।
क्योंकि सब कुछ एक ही तरह से काम करने से जीवन आसान हो जाता है, ये इनपुट, आउटपुट और एरर स्ट्रीम मानकीकृत हो गए हैं ताकि कमांड लाइन के लिए बनाए गए एप्लिकेशन सभी एक ही तरह से व्यवहार करें।
इसलिए, मानक स्ट्रीम . प्रत्येक स्ट्रीम में 0-3 से एक संख्यात्मक पहचानकर्ता होता है:
0 | स्टडिन |
1 | स्टडआउट |
2 | stderr |
stdin से रीडायरेक्ट/पाइप करना , स्टडआउट , बैश/शैल में stderr
आप Linux शेल में टाइप करना टेक्स्ट की एक स्ट्रीम है - आप टाइप करते हैं, और टेक्स्ट स्ट्रीम कंसोल इनपुट में फीड हो जाती है।
एक एप्लिकेशन चलता है, और उसमें से टेक्स्ट डेटा आउटपुट प्रदर्शित करने के लिए कंसोल में फीड किया जाता है ताकि आप इसे पढ़ सकें।
कंसोल पर काम करते समय यह सभी डिफ़ॉल्ट व्यवहार है, लेकिन इसे बदला जा सकता है। धाराओं को पुनर्निर्देशित किया जा सकता है - उदाहरण के लिए, प्रोग्राम के आउटपुट को देखने के लिए कंसोल के बजाय सीधे फ़ाइल में स्ट्रीम किया जा सकता है।
एक प्रोग्राम के आउटपुट को सीधे दूसरे प्रोग्राम के इनपुट में रीडायरेक्ट किया जा सकता है।
यहां पुनर्निर्देशन और पाइपिंग का उपयोग करने वाले कुछ बुनियादी उदाहरण दिए गए हैं।
पुनर्निर्देशन
आमतौर पर, गूंज कमांड कंसोल पर टेक्स्ट प्रिंट करेगा:
echo "hello there!"
स्टडआउट इको प्रोग्राम आपकी स्क्रीन पर प्रदर्शित होने के लिए अपना डिफ़ॉल्ट पथ ले रहा है।
पुनर्निर्देशन आपको इसे कहीं और भेजने की सुविधा देता है। यहाँ, इसे एक फ़ाइल में भेजा जाता है:
echo "hello there!" > test.txt
text.txt . नामक फ़ाइल “नमस्कार!” . टेक्स्ट के साथ बनाया जाएगा (ध्यान रखें, यदि फ़ाइल पहले से मौजूद है, तो उसे अधिलेखित कर दिया जाएगा )।
आप >> . का उपयोग करके फ़ाइलें संलग्न कर सकते हैं इसके बजाय >
इसके बाद, stdin . को रीडायरेक्ट करते हैं < . का उपयोग करना
cat < test.txt
बिल्ली कमांड text.txt . की सामग्री को पढ़ता है अपने स्टडिन . में स्ट्रीम करें और फिर वही करें जो बिल्ली . करता है कमांड को ऐसा करने के लिए डिज़ाइन किया गया है - इसे दिए गए डेटा को stdout . पर प्रिंट करता है , जो डिफ़ॉल्ट रूप से देखने के लिए कंसोल है। तो, यह केवल हैलो वहाँ! . आउटपुट देगा कंसोल के लिए।
फ़ाइल में डेटा को stdin . पर निर्देशित किया गया था कैट कमांड के लिए - इसे रीडायरेक्ट किया गया था।
यह एक तरह का धोखा है, बिल्ली कमांड पाइपिंग के बिना पैरामीटर के रूप में इसे पास किए गए फ़ाइल नाम से पढ़ने का प्रयास करेगा, लेकिन यह इस उदाहरण के प्रयोजनों के लिए सबसे सरल कमांड है।
आप stdin . को रीडायरेक्ट कर सकते हैं और स्टडआउट उसी कमांड में:
cat < test.txt > output.txt
स्टडिन रीडायरेक्ट किया जा रहा है, पढ़ रहा है test.txt बिल्ली . में कार्यक्रम, और stdout बिल्ली . से प्रोग्राम को output.txt . नामक फ़ाइल में निर्देशित किया जा रहा है ।
फिर से, यह धोखा है क्योंकि यह वास्तव में केवल बिल्ली . का उपयोग कर रहा है फ़ाइल को कॉपी करने के लिए कमांड देता है, लेकिन यह एक सरल उदाहरण है जो अन्य कमांड को समझाने पर निर्भर नहीं करता है।
अंत में, आप stderr . को पुनर्निर्देशित कर सकते हैं हम जिस विशिष्ट स्ट्रीम नंबर से पढ़ना चाहते हैं उसे निर्दिष्ट करके स्ट्रीम करें (जैसा कि stdout डिफ़ॉल्ट है, इसे निर्दिष्ट करने की आवश्यकता नहीं है):
cat nofile.txt 2> error.txt
स्टडआउट संख्या से पहचाना जाता है 2 - अगर बिल्ली कोई त्रुटि उत्पन्न करती है, तो उसे इस स्ट्रीम के माध्यम से और फ़ाइल में भेजा जाएगा error.txt ।
ऊपर दिया गया उदाहरण error.txt . नामक फ़ाइल बनाएगा पाठ युक्त:
cat: nofile.txt: No such file or directory
…बिल्ली . के रूप में कमांड को फ़ाइल नहीं मिली nofile.txt ।
एक साथ पुनर्निर्देशन
ऊपर के उदाहरण में, stderr स्ट्रीम की पहचान उसके अंकीय पहचानकर्ता द्वारा की गई थी - इसका मतलब है कि आप रीडायरेक्ट कर सकते हैं stdout और stderr उसी कमांड में यह निर्दिष्ट करके कि आप किसे पुनर्निर्देशित करना चाहते हैं:
echo "hello there! 1>test.txt 2>error.txt
ऊपर, स्टडआउट test.txt, . पर भेजा जाता है और stderr error.txt . पर भेजा जाता है ।
पाइपिंग
पाइपिंग पुनर्निर्देशन के समान है, लेकिन यह केवल stdin . से संबंधित है , और स्टडआउट त्रुटियों पर ध्यान नहीं दिया जाता है।
echo "hello there!" | cat
यहाँ, पाइप (| ) पाइप (रीडायरेक्ट) stdout गूंज . के स्टडिन . को आदेश दें बिल्ली . का आदेश।
निष्कर्ष
कमांड-लाइन एप्लिकेशन के साथ काम करना शुरू में अनपेक्षित लग सकता है, लेकिन कार्यों को स्वचालित करते समय वे शक्तिशाली उपकरण होते हैं। स्टडिन , स्टडआउट, और stderr – मानक स्ट्रीम इस लचीलेपन की आधारशिला हैं - आप जटिल कार्यप्रवाह बनाने के लिए आदेशों को एक साथ श्रृंखलाबद्ध कर सकते हैं जो लगभग किसी भी कार्य को संभाल सकते हैं।