Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

Bash और Linux शेल में Heredoc (हियर डॉक्यूमेंट्स) में महारत हासिल करें – व्यापक ट्यूटोरियल

यह लेख आपको दिखाएगा कि Bash/शेल स्क्रिप्ट में मल्टी-लाइन टेक्स्ट के साथ काम करने के लिए Heredoc (Here Document) का उपयोग कैसे करें।

Heredocs मल्टी-लाइन इनपुट स्वीकार करने के लिए सबसे उपयोगी हैं – उपयोगकर्ता टेक्स्ट की एक लाइन दर्ज कर सकता है, एंटर दबा सकता है, फिर अगली लाइन दर्ज कर सकता है, और इसी तरह। इसका उपयोग स्क्रिप्ट में मल्टी-लाइन टेक्स्ट को परिभाषित करने के लिए भी किया जा सकता है।

इसका उपयोग एक इंटरैक्टिव प्रोग्राम में कई कमांड भेजने के लिए भी किया जा सकता है – यह बाद में उदाहरणों में दिखाया जाएगा।

इस लेख के उदाहरण Bash और Zsh दोनों शेल में काम करेंगे।

मानक इनपुट, पाइपिंग, और रीडायरेक्शन

Heredoc का उपयोग आमतौर पर मानक इनपुट/आउटपुट और रीडायरेक्शन/पाइपिंग के साथ मल्टी-लाइन टेक्स्ट को अन्य कमांड को प्रोसेसिंग, फॉर्मेटिंग, या डिस्प्ले के लिए भेजने के लिए किया जाता है। इस विषय को वास्तव में स्वयं एक लेख की आवश्यकता है अवधारणा को समझाने के लिए, तो यहाँ यह है:

Linux/Bash में stdin, stdout, stderr को रीडायरेक्ट करें, उदाहरणों के साथ

नीचे दिए गए उदाहरण लेख में पहले कवर की गई अवधारणाओं और विधियों का कई बिंदुओं पर उपयोग करेंगे।

Bash/Zsh Heredoc सिंटैक्स

Heredoc शुरू करने के लिए, आप बस << कमांड का उपयोग करते हैं। यह ऊपर उल्लिखित इनपुट/आउटपुट रीडायरेक्शन का एक रूप है।

Heredoc का उपयोग करने का सिंटैक्स इस प्रकार है:

COMMAND <<LIMITSTRING text line 1 text line 2 ... LIMITSTRING

ध्यान दें कि:

  • COMMAND कोई भी Linux कमांड या स्क्रिप्ट हो सकती है – heredoc में निहित टेक्स्ट की सामग्री को रीडायरेक्शन का उपयोग करके इसमें भेजा जाएगा
  • << Heredoc स्टेटमेंट की शुरुआत को परिभाषित करता है
    • यदि आप मल्टी-लाइन टेक्स्ट को इंडेंट करने जा रहे हैं, तो इसके बजाय <<- (नोट करें अतिरिक्त डैश) का उपयोग करें – यह प्रत्येक लाइन से अग्रणी टैब को हटा देगा
  • LIMITSTRING वह स्ट्रिंग है जिसे Heredoc के लिए टेक्स्ट दर्ज करना समाप्त करने के लिए टाइप किया जाना चाहिए
    • चूंकि Heredocs मल्टी-लाइन हैं, उपयोगकर्ता अगली लाइन पर जाने के लिए ENTER कुंजी दबाता है, आप टेक्स्ट दर्ज करना रोकने के लिए एंटर नहीं दबा सकते।
    • अपनी उपस्थिति पर LIMITSTRING, Heredoc को बताता है कि आप टेक्स्ट दर्ज करना समाप्त कर चुके हैं और खत्म करने के लिए
    • यह कुछ भी हो सकता है – सुनिश्चित करें कि आप वर्णों की एक श्रृंखला का उपयोग करते हैं जिसे आपके टेक्स्ट में प्रकट होने की आवश्यकता नहीं होगी ताकि यह समय से पहले समाप्त न हो।
    • एक सामान्य अभ्यास EOF टेक्स्ट ( End Of File के लिए छोटा) का उपयोग LIMITSTRING के रूप में करना है – जब तक यह टेक्स्ट Heredoc के अंदर प्रकट नहीं होने वाला है।
  • आप जितनी चाहें उतनी टेक्स्ट लाइनें रख सकते हैं

Heredoc उदाहरण

मल्टी-लाइन टेक्स्ट इनपुट स्वीकार करना

यह उदाहरण कई लाइनों के टेक्स्ट को स्वीकार करेगा और उन्हें डिस्प्ले के लिए cat कमांड को भेजेगा:

cat <<EOF This is line 1 This is line 2 EOF

उपरोक्त उदाहरण को आपके टर्मिनल प्रोग्राम में टाइप किया जाना चाहिए।

वेरिएबल का उपयोग करना

आप अपने Heredoc में शेल वेरिएबल का उपयोग कर सकते हैं:

cat <<EOF This is line 1 This is line 2 Your current directory is $PWD EOF

ऊपर, $PWD वेरिएबल Heredoc की लाइनों में से एक में प्रदर्शित होता है – यह वेरिएबल वर्तमान कार्यशील निर्देशिका का मान रखता है।

Heredoc के आउटपुट को रीडायरेक्ट करना

मानक रीडायरेक्शन (यदि आप नहीं जानते कि यह क्या है तो लेख में पहले देखें) का उपयोग COMMAND को भेजे जाने के बाद Heredoc की सामग्री को किसी अन्य प्रोग्राम या फ़ाइल में भेजने के लिए किया जा सकता है:

cat <<EOF > output.txt This is line 1 This is line 2 Your current directory is $PWD EOF

ऊपर, cat Heredoc की सामग्री पढ़ता है, और cat का आउटपुट > कमांड का उपयोग करके फ़ाइल output.txt में रीडायरेक्ट और लिखा जाता है।

स्क्रिप्ट में मल्टी-लाइन टेक्स्ट परिभाषित करना

आप किसी स्क्रिप्ट में Heredoc का उपयोग कर सकते हैं। चूंकि एक शेल स्क्रिप्ट केवल शेल में फीड की जाने वाली लाइन-बाय-लाइन कमांड की सूची है, यह उसी तरह व्यवहार करेगा।

अपने स्क्रिप्ट कोड को इंडेंट करना अच्छा है – यदि आप उन टैब को अपने टेक्स्ट में प्रकट नहीं होने देना चाहते हैं, तो आप अपने Heredoc घोषणा में एक – (डैश) जोड़ सकते हैं ताकि प्रत्येक लाइन की शुरुआत से किसी भी व्हाइट स्पेस को हटा दिया जाए:

#!/bin/bash if $trueOrFalse; then cat <<-EOF > output.txt This is line 1 This is line 2 Your current directory is $PWD EOF fi #!/bin/bash

Heredoc को एक वेरिएबल में असाइन करना

आप cat कमांड से इसे पढ़कर और आउटपुट को एक वेरिएबल को असाइन करके Heredoc में मल्टी-लाइन टेक्स्ट को एक स्क्रिप्ट वेरिएबल में असाइन कर सकते हैं:

mytext=$(cat <<-EOF This is line 1 This is line 2 Your current directory is $PWD EOF ) echo $mytext

एक इंटरैक्टिव प्रोग्राम को कई कमांड भेजना

Heredocs एक इंटरैक्टिव प्रोग्राम को टेक्स्ट की कई लाइनें भी भेज सकते हैं। कुछ प्रोग्राम, एक बार लॉन्च होने के बाद, आपसे अपने कमांड टाइप करने की उम्मीद करते हैं – वे प्रोसेसिंग के लिए टेक्स्ट स्वीकार कर सकते हैं या कमांड जारी करने के लिए अपना खुद का शेल प्रदान कर सकते हैं।

इसका एक उदाहरण MySQL है – एक बार MySQL लॉन्च हो जाता है और एक सर्वर से जुड़ जाता है, तो आप डेटा क्वेरी करने के लिए एंटर कुंजी के बाद अपने खुद के कमांड टाइप कर सकते हैं। Heredoc का उपयोग करके, आप इन कमांड को पूर्व-लिखित कर सकते हैं और उन्हें उपयोगकर्ता इंटरैक्शन के बिना MySQL में भेज सकते हैं:

mysql -uUSERNAME -pPASSWORD DATABASE <<EOF SHOW TABLES; SELECT * FROM posts; EOF

ऊपर, दिए गए DATABASE से USERNAME और PASSWORD के साथ कनेक्ट करने के लिए MySQL कमांड का उपयोग किया जाता है।

कनेक्शन तैयार होने के बाद दो क्रमिक कमांड जारी किए जाएंगे – एक SHOW TABLES के लिए और एक posts टेबल से सभी रिकॉर्ड SELECT करने के लिए।


  1. Bash वेरिएबल्स में मास्टर करें: ग्लोबल और लोकल उपयोग के 6 व्यावहारिक उदाहरण Bash वेरिएबल्स में मास्टर करें: ग्लोबल और लोकल उपयोग के 6 व्यावहारिक उदाहरण

    यह लेख हमारी चल रही bash ट्यूटोरियल सीरीज़ का हिस्सा है। किसी भी अन्य प्रोग्रामिंग भाषा की तरह, Bash भी वेरिएबल्स प्रदान करता है। Bash वेरिएबल्स प्रोग्राम के जीवनकाल के दौरान आवश्यक जानकारी के लिए अस्थायी भंडारण प्रदान करते हैं। सिंटैक्स: VARNAME=VALUE नोट: वेरिएबल असाइनमेंट में = चिन्ह के आसपास कोई

  1. Bash शेल फ़ंक्शन्स में मास्टर करें: 6 व्यावहारिक उदाहरण और टिप्स Bash शेल फ़ंक्शन्स में मास्टर करें: 6 व्यावहारिक उदाहरण और टिप्स

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

  1. Bash स्क्रिप्टिंग में मास्टर करें: 5 वास्तविक-विश्व उदाहरणों के साथ एक व्यावहारिक परिचय Bash स्क्रिप्टिंग में मास्टर करें: 5 वास्तविक-विश्व उदाहरणों के साथ एक व्यावहारिक परिचय

    हमारे चल रहे Unix Sed और Unix Awk सीरीज़ के समान, हम Bash स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो व्यावहारिक उदाहरणों के साथ सभी Bash स्क्रिप्टिंग तकनीकों को कवर करेंगे। शेल एक प्रोग्राम है, जो उपयोगकर्ता कमांड्स की व्याख्या करता है। कमांड्स या तो उपयोगकर्ता द्वारा सीधे दर्ज की जाती हैं या शेल स्क्र