यह लेख आपको दिखाएगा कि हेरेडोक का उपयोग कैसे करें (यहां दस्तावेज़ ) बैश/शैल स्क्रिप्ट में मल्टी-लाइन टेक्स्ट के साथ काम करने के लिए।
बहु-पंक्ति इनपुट स्वीकार करने के लिए हेरेडोक सबसे उपयोगी हैं- उपयोगकर्ता टेक्स्ट की एक पंक्ति दर्ज कर सकता है, एंटर दबा सकता है, फिर अगली पंक्ति दर्ज कर सकता है, और इसी तरह। इसका उपयोग लिपियों में बहु-पंक्ति पाठ को परिभाषित करने के लिए भी किया जा सकता है।
यह एक इंटरैक्टिव प्रोग्राम में कई कमांड भी भेज सकता है - इसे बाद के उदाहरणों में दिखाया जाएगा।
इस लेख के उदाहरण बैश और ज़श शैल दोनों में काम करेंगे।
मानक इनपुट, पाइपिंग और पुनर्निर्देशन
हेरेडोक आमतौर पर मानक इनपुट/आउटपुट और पुनर्निर्देशन/पाइपिंग के साथ प्रसंस्करण, स्वरूपण या प्रदर्शन के लिए अन्य आदेशों को मल्टीलाइन टेक्स्ट भेजने के लिए उपयोग किया जाता है। अवधारणा को समझाने के लिए इस विषय को वास्तव में अपने लिए एक लेख की आवश्यकता है, इसलिए यह है:
लिनक्स/बैश में रीडायरेक्ट स्टड, स्टडआउट, स्टैडर, उदाहरणों के साथ
नीचे दिए गए उदाहरण उपरोक्त आलेख में शामिल अवधारणाओं और विधियों का कई बिंदुओं पर उपयोग करेंगे।
बैश/Zsh हेरेडोक सिंटैक्स
एक Heredoc . शुरू करने के लिए , आप बस << . का उपयोग करें आज्ञा। यह ऊपर उल्लिखित इनपुट/आउटपुट पुनर्निर्देशन का एक रूप है।
Heredoc . का उपयोग करने के लिए सिंटैक्स इस प्रकार है:
COMMAND <<LIMITSTRING text line 1 text line 2 ... LIMITSTRING
ध्यान दें कि:
- कमांड कोई भी लिनक्स कमांड या स्क्रिप्ट हो सकती है - हेरेडोक में निहित पाठ की सामग्री को पुनर्निर्देशन का उपयोग करके इसे भेजा जाएगा
- < हेरेडोक कथन की शुरुआत को परिभाषित करता है
- यदि आप बहु-पंक्ति पाठ को इंडेंट करने जा रहे हैं, तो <<- का उपयोग करें (जोड़े गए डैश पर ध्यान दें) इसके बजाय - यह प्रत्येक पंक्ति से अग्रणी टैब को हटा देगा
- LIMITSTRING वह स्ट्रिंग है जिसे हेरेडोक के लिए टेक्स्ट की प्रविष्टि को समाप्त करने के लिए टाइप किया जाना चाहिए
- चूंकि हेरेडॉक्स बहु-पंक्ति हैं, उपयोगकर्ता अगली पंक्ति में जाने के लिए ENTER कुंजी दबाते हैं, आप नया टेक्स्ट दर्ज करना बंद करने के लिए एंटर नहीं दबा सकते हैं।
- LIMITSTRING , इसकी उपस्थिति पर, हेरेडोक को बताता है कि आपने पाठ दर्ज करना और समाप्त करना समाप्त कर दिया है
- यह कुछ भी हो सकता है - सुनिश्चित करें कि आप वर्णों की एक श्रृंखला का उपयोग करते हैं जिन्हें आपके टेक्स्ट में प्रदर्शित होने की आवश्यकता नहीं होगी ताकि यह समय से पहले समाप्त न हो।
- EOF . टेक्स्ट का उपयोग करना एक आम बात है (ई . के लिए संक्षिप्त nd O f F ile) LIMITSTRING . के रूप में - जब तक यह टेक्स्ट हेरेडोक के अंदर प्रदर्शित नहीं होने वाला है।
- आपके पास टेक्स्ट की जितनी चाहें उतनी पंक्तियां हो सकती हैं
हेयरडॉक उदाहरण
मल्टी-लाइन टेक्स्ट इनपुट स्वीकार करना
यह उदाहरण टेक्स्ट की कई पंक्तियों को स्वीकार करेगा और उन्हें बिल्ली . को भेजेगा प्रदर्शन के लिए आदेश:
cat <<EOF This is line 1 This is line 2 EOF
उपरोक्त उदाहरण आपके टर्मिनल प्रोग्राम में टाइप किया जाना चाहिए।
चर का उपयोग करना
आप अपने हेरेडोक में शेल चर का उपयोग कर सकते हैं:
cat <<EOF This is line 1 This is line 2 Your current directory is $PWD EOF
ऊपर, $PWD चर हेरेडोक की पंक्तियों में से एक में प्रदर्शित होता है - यह चर वर्तमान कार्यशील निर्देशिका का मान रखता है।
Heredoc के आउटपुट को रीडायरेक्ट करना
मानक पुनर्निर्देशन (यदि आप नहीं जानते कि यह क्या है तो लेख में पहले देखें) का उपयोग हेरेडोक की सामग्री को COMMAND को किसी अन्य प्रोग्राम या फ़ाइल में भेजे जाने के बाद भेजने के लिए किया जा सकता है:
cat <<EOF > output.txt This is line 1 This is line 2 Your current directory is $PWD EOF
ऊपर, बिल्ली हेरेडोक की सामग्री और बिल्ली . के आउटपुट को पढ़ता है फ़ाइल पर रीडायरेक्ट किया जाता है और लिखा जाता है output.txt > . का उपयोग करके आदेश।
मल्टी-लाइन टेक्स्ट को स्क्रिप्ट में परिभाषित करना
आप एक स्क्रिप्ट में हेरेडोक का उपयोग कर सकते हैं। शेल स्क्रिप्ट के रूप में शेल में फीड किए जाने वाले लाइन-बाय-लाइन कमांड की एक सूची है, यह उसी तरह व्यवहार करेगा।
अपने स्क्रिप्ट कोड को इंडेंट करने में सक्षम होना अच्छा है - यदि आप नहीं चाहते कि वे टैब आपके टेक्स्ट में दिखाई दें, तो आप एक - जोड़ सकते हैं (डैश) प्रत्येक पंक्ति की शुरुआत से किसी भी सफेद स्थान को छीनने के लिए आपके हेरेडोक घोषणा में:
#!/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है
वैरिएबल को हेरेडोक असाइन करना
आप एक हेरेडॉक में बहु-पंक्ति पाठ को एक स्क्रिप्ट चर को बिल्ली के साथ पढ़कर असाइन कर सकते हैं कमांड और आउटपुट को एक वैरिएबल को असाइन करना जैसे:
mytext=$(cat <<-EOF This is line 1 This is line 2 Your current directory is $PWD EOF ) echo $mytext
एक इंटरैक्टिव प्रोग्राम में एकाधिक कमांड भेजना
हेरेडोक एक इंटरेक्टिव प्रोग्राम में टेक्स्ट की कई पंक्तियों को भी भेज सकता है। कुछ प्रोग्राम, एक बार लॉन्च होने के बाद, आपसे अपने स्वयं के आदेश टाइप करने की अपेक्षा करते हैं - वे प्रसंस्करण के लिए पाठ स्वीकार कर सकते हैं या आदेश जारी करने के लिए अपना स्वयं का खोल प्रदान कर सकते हैं।
इसका एक उदाहरण MySQL है - एक बार जब MySQL लॉन्च हो जाता है और सर्वर से कनेक्ट हो जाता है, तो आप अपनी खुद की कमांड टाइप कर सकते हैं और उसके बाद डेटा को क्वेरी करने के लिए एंटर कुंजी टाइप कर सकते हैं। हेरेडोक का उपयोग करके, आप इन आदेशों को पूर्व-लिखित कर सकते हैं और उन्हें उपयोगकर्ता सहभागिता के बिना MySQL में भेज सकते हैं:
mysql -uUSERNAME -pPASSWORD DATABASE <<EOF SHOW TABLES; SELECT * FROM posts; EOF
ऊपर, MySQL कमांड का उपयोग किसी दिए गए DATABASE को USERNAME और PASSWORD से जोड़ने के लिए किया जाता है।
कनेक्शन तैयार होने के बाद दो अनुक्रमिक आदेश जारी किए जाएंगे - एक तालिका दिखाएं के लिए और एक को चुनें पोस्ट . के सभी रिकॉर्ड टेबल।