यहाँ दस्तावेज़ (Heredoc ) एक इनपुट या फ़ाइल स्ट्रीम शाब्दिक है जिसे कोड के एक विशेष ब्लॉक के रूप में माना जाता है। कोड के इस ब्लॉक को प्रोसेसिंग के लिए कमांड को पास किया जाएगा। हेरेडोक UNIX . में उत्पन्न होता है गोले और लोकप्रिय लिनक्स गोले जैसे sh, tcsh, ksh, bash, zsh, csh में पाए जा सकते हैं। विशेष रूप से, अन्य प्रोग्रामिंग भाषाएं जैसे पर्ल, रूबी, पीएचपी भी हेरेडोक का समर्थन करती हैं।
हर्डोक की संरचना
हेरेडोक 2 कोण कोष्ठक का उपयोग करता है (<<) उसके बाद सीमांकक टोकन . कोड के ब्लॉक को समाप्त करने के लिए समान सीमांकक टोकन का उपयोग किया जाएगा। जो कुछ भी सीमांकक के भीतर आता है उसे कोड का ब्लॉक माना जाता है।
नीचे दिए गए उदाहरण को देखें। मैं कोड के ब्लॉक को कैट कमांड पर रीडायरेक्ट कर रहा हूं। यहां सीमांकक "ब्लॉक करें . पर सेट है ” और उसी “ब्लॉक . द्वारा समाप्त किया गया ".
cat << BLOCK
Hello world
Today date is $(date +%F)
My home directory = ${HOME}
BLOCK
नोट :ब्लॉक को शुरू करने और ब्लॉक को समाप्त करने के लिए आपको उसी सीमांकक टोकन का उपयोग करना चाहिए।
मल्टीलाइन टिप्पणियां बनाएं
यदि आप अभी बैश में कोडिंग कर रहे हैं, तो आप जान सकते हैं कि डिफ़ॉल्ट रूप से बैश मल्टीलाइन टिप्पणियों का समर्थन नहीं करता है, जैसे C या जावा . आप यहां डॉक . का उपयोग कर सकते हैं इस पर काबू पाने के लिए।
यह बहु-पंक्ति टिप्पणी का समर्थन करने वाले बैश की एक अंतर्निहित विशेषता नहीं है, बल्कि सिर्फ एक हैक है। यदि आप heredoc . को पुनर्निर्देशित नहीं कर रहे हैं किसी भी कमांड के लिए, दुभाषिया केवल कोड के ब्लॉक को पढ़ेगा और कुछ भी निष्पादित नहीं करेगा।
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
सफेद जगहों को संभालना
डिफ़ॉल्ट रूप से, heredoc किसी भी व्हाइट स्पेस कैरेक्टर (टैब, स्पेस) को नहीं दबाएगा। हम dash (-) . जोड़कर इस व्यवहार को ओवरराइड कर सकते हैं (<<) . के बाद उसके बाद एक सीमांकक। यह सभी टैब स्पेस को दबा देगा लेकिन व्हाइट स्पेस को दबाया नहीं जाएगा।
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
वेरिएबल और कमांड सबस्टेशन
हेरेडोक परिवर्तनीय प्रतिस्थापन स्वीकार करता है। चर उपयोगकर्ता-परिभाषित चर या पर्यावरण चर हो सकते हैं।
TODAY=$(date +%F)
cat << BLOCK1
# User defined variables
Today date is = ${TODAY}
#Environ Variables
I am running as = ${USER}
My home dir is = ${HOME}
I am using ${SHELL} as my shell
BLOCK1
इसी तरह, आप heredoc . के अंदर कोई भी आदेश चला सकते हैं कोड ब्लॉक।
cat << BLOCK2 $(uname -a) BLOCK2
विशेष वर्णों से बचना
ऐसे कई तरीके हैं जिनसे हम विशेष पात्रों से बच सकते हैं। या तो आप इसे चरित्र स्तर या डॉक्टर स्तर पर कर सकते हैं।
अलग-अलग विशेष वर्णों से बचने के लिए बैकस्लैश (\) . का उपयोग करें ।
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 . का उपयोग करता हूं SSH पर कमांड का एक ब्लॉक चला रहे हैं और heredoc . के माध्यम से SQL क्वेरी पास कर रहे हैं ।
नीचे दिए गए उदाहरण में, हम SSH के माध्यम से एक दूरस्थ सर्वर में कोड के एक ब्लॉक को निष्पादित करने का प्रयास कर रहे हैं।
नीचे दिए गए उदाहरण में मैं चयन passing पास कर रहा हूं psql . को बयान डेटाबेस से कनेक्ट करने और क्वेरी चलाने के लिए। 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 . के साथ कोई उपयोगी हैक है कृपया इसे टिप्पणी अनुभाग में पोस्ट करें ताकि हमारे पाठक इससे लाभान्वित हो सकें।