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

शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

हियर डॉक्यूमेंट (Heredoc) एक इनपुट या फ़ाइल स्ट्रीम लिटरल है जिसे कोड के एक विशेष ब्लॉक के रूप में माना जाता है। कोड का यह ब्लॉक प्रोसेसिंग के लिए एक कमांड को पास किया जाएगा। Heredoc UNIX शेल्स में उत्पन्न होता है और sh, tcsh, ksh, bash, zsh, csh जैसे लोकप्रिय लिनक्स शेल्स में पाया जा सकता है। विशेष रूप से, पर्ल, रूबी, PHP जैसी अन्य प्रोग्रामिंग भाषाएं भी heredoc का समर्थन करती हैं।

Herdoc की संरचना

Heredoc 2 एंगल ब्रैकेट (<<) का उपयोग करता है जिसके बाद एक डिलीमीटर टोकन होता है। वही डिलीमीटर टोकन कोड ब्लॉक को समाप्त करने के लिए उपयोग किया जाएगा। डिलीमीटर के भीतर जो कुछ भी आता है उसे कोड ब्लॉक माना जाता है।

नीचे दिए गए उदाहरण को देखें। मैं कोड ब्लॉक को cat कमांड पर रीडायरेक्ट कर रहा हूँ। यहां डिलीमीटर BLOCK पर सेट है और उसी BLOCK द्वारा समाप्त होता है।

cat << BLOCK
Hello world
Today date is $(date +%F)
My home directory = ${HOME}
BLOCK

नोट: ब्लॉक शुरू करने और समाप्त करने के लिए आपको एक ही डिलीमीटर टोकन का उपयोग करना चाहिए।

मल्टीलाइन कमेंट्स बनाएं

यदि आप अभी कुछ समय से bash में कोडिंग कर रहे हैं, तो आप जानते होंगे कि bash डिफ़ॉल्ट रूप से C या Java की तरह मल्टीलाइन कमेंट्स का समर्थन नहीं करता। आप HereDoc का उपयोग करके इसे दूर कर सकते हैं।

यह bash की मल्टी-लाइन कमेंट का समर्थन करने वाली बिल्ट-इन सुविधा नहीं है, बल्कि सिर्फ एक हैक है। यदि आप heredoc को किसी कमांड पर रीडायरेक्ट नहीं कर रहे हैं, तो इंटरप्रेटर केवल कोड ब्लॉक को पढ़ेगा और कुछ भी निष्पादित नहीं करेगा।

<< COMMENT
This is comment line 1
This is comment line 2
This is comment line 3
COMMENT
शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

व्हाइट स्पेस को संभालना

डिफ़ॉल्ट रूप से, heredoc किसी भी व्हाइट स्पेस कैरेक्टर (टैब, स्पेस) को दबाएगा नहीं। हम डैश (-) को (<<) के बाद डिलीमीटर के बाद जोड़कर इस व्यवहार को ओवरराइड कर सकते हैं। यह सभी टैब स्पेस को दबा देगा लेकिन व्हाइट स्पेस को दबाया नहीं जाएगा।

cat <<- BLOCK
This line has no whitespace.
This line has 2 white spaces at the beginning.
This line has a single tab.
This line has 2 tabs.
This line has 3 tabs.
BLOCK
शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

वेरिएबल और कमांड सब्स्टीट्यूशन

Heredoc वेरिएबल सब्स्टीट्यूशन स्वीकार करता है। वेरिएबल्स उपयोगकर्ता-परिभाषित वेरिएबल्स या एनवायरनमेंटल वेरिएबल्स हो सकते हैं।

TODAY=$(date +%F)
cat << BLOCK1
# उपयोगकर्ता-परिभाषित वेरिएबल्स
Today date is = ${TODAY}
# एनवायरनमेंट वेरिएबल्स
I am running as = ${USER}
My home dir is = ${HOME}
I am using ${SHELL} as my shell
BLOCK1

इसी तरह, आप heredoc कोड ब्लॉक के अंदर कोई भी कमांड चला सकते हैं।

cat << BLOCK2
$(uname -a)
BLOCK2
शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

विशेष कैरेक्टर्स को एस्केप करना

विशेष कैरेक्टर्स को एस्केप करने के कई तरीके हैं। या तो आप इसे कैरेक्टर लेवल पर या डॉक लेवल पर कर सकते हैं।

व्यक्तिगत विशेष कैरेक्टर्स को एस्केप करने के लिए बैकस्लैश (\) का उपयोग करें।

cat << BLOCK4
$(uname -a)
BLOCK4
cat << BLOCK5
Today date is = ${TODAY}
BLOCK5

ब्लॉक के अंदर सभी विशेष कैरेक्टर्स को एस्केप करने के लिए डिलीमीटर को सिंगल कोट्स, डबल कोट्स से घेरें, या डिलीमीटर को बैकस्लैश से प्रीफिक्स करें।

cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1
cat << "BLOCK2"
I am running as = ${USER}
BLOCK2
cat << \BLOCK3
I am running as = ${USER}
BLOCK3
शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

अब जब हम heredoc की संरचना और यह कैसे काम करता है जानते हैं, आइए कुछ उदाहरण देखें। दो सामान्य क्षेत्र जहां मैं heredoc का उपयोग करता हूँ, SSH पर कमांड ब्लॉक चलाना और heredoc के माध्यम से SQL क्वेरी पास करना।

नीचे दिए गए उदाहरण में, हम SSH के माध्यम से एक रिमोट सर्वर पर कोड ब्लॉक निष्पादित करने का प्रयास कर रहे हैं।

शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

नीचे दिए गए उदाहरण में मैं psql से कनेक्ट करने और क्वेरी चलाने के लिए select स्टेटमेंट को psql पर पास कर रहा हूँ। यह bash स्क्रिप्ट के अंदर psql में क्वेरी चलाने का एक वैकल्पिक तरीका है बजाय -f फ्लैग का उपयोग करके .sql फ़ाइल चलाने के।

#!/usr/bin/env bash
UNAME=postgres
DBNAME=testing
psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES WHERE region_id = 4;
BLOCK
शेल स्क्रिप्टिंग में Heredoc मास्टर करें: एक व्यावहारिक गाइड

इस लेख के लिए बस इतना ही। heredoc के साथ आप उससे कहीं अधिक कर सकते हैं जितना हमने उदाहरणों में दिखाया है। यदि आपके पास heredoc के साथ कोई उपयोगी हैक है तो कृपया इसे कमेंट सेक्शन में पोस्ट करें ताकि हमारे पाठक उससे लाभ उठा सकें।

  1. WSL के साथ Windows 10 पर Bash इंस्टॉल और उपयोग करें - चरण-दर-चरण ट्यूटोरियल WSL के साथ Windows 10 पर Bash इंस्टॉल और उपयोग करें - चरण-दर-चरण ट्यूटोरियल

    यहां बताया गया है कि Windows पर Linux शेल को कैसे सेट अप और उपयोग करें – Windows Subsystem for Linux (WSL) का उपयोग करके। यह ट्यूटोरियल 2020 के बाद से Windows 10 के अप-टू-डेट संस्करणों के लिए अभिप्रेत है। मैं Windows 10 के पुराने संस्करणों या Windows 8/7/XP/3.1 के लिए अन्य विधियों पर WSL का उपयोग कै

  1. Google Family Link से ऐप्स ब्लॉक करें: माता-पिता के लिए चरण-दर-चरण गाइड Google Family Link से ऐप्स ब्लॉक करें: माता-पिता के लिए चरण-दर-चरण गाइड

    विकसित होती प्रौद्योगिकी और बदलते रुझानों के बीच, उनके साथ तालमेल बिठाना काफी कठिन है। घर में बच्चों के साथ, माता-पिता को अतिरिक्त सावधान रहने की जरूरत है। प्रौद्योगिकी लगातार प्रगति कर रही है और हमारी जीवनशैली इसके साथ बदल रही है। स्मार्टफोन की व्यापकता और ऐप्स की प्रचुरता के साथ, बच्चों की गतिविधि

  1. Windows 10 पर SSH Secure Shell का उपयोग: चरण-दर-चरण गाइड Windows 10 पर SSH Secure Shell का उपयोग: चरण-दर-चरण गाइड

    यदि आप अपने कंप्यूटर को रिमोट डेस्कटॉप से या डेटा साझा करने के लिए नेटवर्क पर कनेक्ट करना चाहते हैं, तो एक Secure Shell की आवश्यकता होती है। इस ब्लॉग में हम सीखेंगे कि Windows 10 में SSH Secure Shell का उपयोग कैसे करें। एक SSH Secure Shell को एक डिवाइस और किसी भी नेटवर्क, इंटरनेट सहित, के बीच संचार