Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

लिनक्स/बैश में स्टड, स्टडआउट, स्टैडर को पुनर्निर्देशित करें, उदाहरणों के साथ

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 – मानक स्ट्रीम इस लचीलेपन की आधारशिला हैं - आप जटिल कार्यप्रवाह बनाने के लिए आदेशों को एक साथ श्रृंखलाबद्ध कर सकते हैं जो लगभग किसी भी कार्य को संभाल सकते हैं।


  1. उदाहरण के साथ, लिनक्स में वॉच कमांड का उपयोग कैसे करें

    लिनक्स में वॉच कमांड एक काम करता है - एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहां इसका उपयोग करने का तरीका बताया गया है। कमांड सिंटैक्स देखें वॉच कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: विकल्प नीचे दी गई तालिका

  1. पहेली की इस किताब के साथ जानें बैश

    कंप्यूटर मेरा शौक और मेरा पेशा दोनों है। मेरे पास उनमें से लगभग 10 मेरे अपार्टमेंट के चारों ओर बिखरे हुए हैं, सभी चल रहे लिनक्स (मेरे मैक सहित)। चूँकि मुझे अपने कंप्यूटर और अपने कंप्यूटर कौशल को अपग्रेड करने में मज़ा आता है, जब मुझे इसे बैश आउट मिला तो सिल्वेन लेरौक्स द्वारा, मैं इसे खरीदने के मौके

  1. बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

    बैश शेल फ़ंक्शन समूह के लिए एकल नाम का उपयोग करके बाद में निष्पादन के लिए कई UNIX / Linux कमांड को समूहबद्ध करने का एक तरीका है। . बैश शेल फ़ंक्शन को नियमित यूनिक्स कमांड की तरह ही निष्पादित किया जा सकता है। शेल फ़ंक्शंस को मौजूदा शेल संदर्भ में उनकी व्याख्या करने के लिए कोई नई प्रक्रिया बनाए बिना न