Bash
यहां दस्तावेज और यहां तार
खोज…
यहां दस्तावेजों को प्रस्तुत करना
आप पाठ के अंदर यहां इंडेंट कर सकते हैं टैब के साथ दस्तावेजों, आप का उपयोग करने की आवश्यकता है <<-
बजाय पुनर्निर्देशन ऑपरेटर <<
:
$ cat <<- EOF
This is some content indented with tabs `\t`.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.
EOF
This is some content indented with tabs _\t_.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.
इसका एक व्यावहारिक उपयोग मामला (जैसा कि man bash
में वर्णित है) शेल स्क्रिप्ट में है, उदाहरण के लिए:
if cond; then
cat <<- EOF
hello
there
EOF
fi
बेहतर पठनीयता के लिए, if
यह कथन है if
कोड ब्लॉक के भीतर लाइनों को इंडेंट करने के लिए प्रथागत है। <<-
ऑपरेटर सिंटैक्स के बिना, हम उपरोक्त कोड को इस तरह लिखने के लिए मजबूर होंगे:
if cond; then
cat << EOF
hello
there
EOF
fi
यह पढ़ने के लिए बहुत अप्रिय है, और यह अधिक जटिल यथार्थवादी स्क्रिप्ट में बहुत खराब हो जाता है।
यहाँ तार
आप इस तरह से तार का उपयोग कर एक आदेश फ़ीड कर सकते हैं:
$ awk '{print $2}' <<< "hello world - how are you?"
world
$ awk '{print $1}' <<< "hello how are you
> she is fine"
hello
she
आप यहां स्ट्रिंग के साथ while
लूप भी खिला सकते हैं:
$ while IFS=" " read -r word1 word2 rest
> do
> echo "$word1"
> done <<< "hello how are you - i am fine"
hello
स्ट्रिंग्स को सीमित करें
एक हेरेडोक खपत इनपुट को रोकने के लिए निर्धारित करने के लिए लिमिटस्ट्रिंग का उपयोग करता है। समाप्ति सीमा सीमा होनी चाहिए
- एक लाइन की शुरुआत में हो।
- लाइन पर केवल पाठ हो नोट: यदि आप
<<-
उपयोग करते हैं<<-
तो लिमिटिंग को टैब\t
उपसर्ग किया जा सकता\t
सही बात:
cat <<limitstring
line 1
line 2
limitstring
यह आउटपुट होगा:
line 1 line 2
गलत उपयोग:
cat <<limitstring
line 1
line 2
limitstring
चूँकि अंतिम लाइन पर limitstring
लाइन के शुरू में नहीं है, शेल आगे इनपुट के लिए इंतजार करना जारी रखेगा, जब तक कि यह एक लाइन नहीं देखता है जो limitstring
शुरू होता है और इसमें कुछ और नहीं होता है। इसके बाद ही यह इनपुट की प्रतीक्षा करना बंद कर देगा, और यहां से दस्तावेज़ को cat
कमांड को पास करने के लिए आगे बढ़ना होगा।
ध्यान दें कि जब आप एक हाइफ़न के साथ प्रारंभिक लिमिटस्ट्रिंग को उपसर्ग करते हैं, तो लाइन की शुरुआत में किसी भी टैब को पार्स करने से पहले हटा दिया जाता है, इसलिए डेटा और लिमिट स्ट्रिंग टैब के साथ इंडेंट किया जा सकता है (शेल स्क्रिप्ट में पढ़ने में आसानी के लिए)।
cat <<-limitstring
line 1 has a tab each before the words line and has
line 2 has two leading tabs
limitstring
उत्पादन करेंगे
line 1 has a tab each before the words line and has line 2 has two leading tabs
प्रमुख टैब के साथ (लेकिन आंतरिक टैब नहीं) हटाया गया।
एक फ़ाइल बनाएँ
यहां दस्तावेजों का एक क्लासिक उपयोग इसकी सामग्री टाइप करके एक फ़ाइल बनाने के लिए है:
cat > fruits.txt << EOF
apple
orange
lemon
EOF
यहाँ दस्तावेज़ << EOF
और EOF
बीच की रेखाएँ हैं।
यहाँ दस्तावेज़ cat
कमांड का इनपुट बन जाता है। cat
कमांड बस इसके इनपुट को आउटपुट करता है, और आउटपुट पुनर्निर्देशन ऑपरेटर का उपयोग करके >
हम एक फ़ाइल fruits.txt
रीडायरेक्ट करते हैं।
नतीजतन, fruits.txt
फ़ाइल में लाइनें शामिल होंगी:
apple
orange
lemon
आउटपुट पुनर्निर्देशन के सामान्य नियम लागू होते हैं: अगर fruits.txt
पहले मौजूद नहीं था, तो इसे बनाया जाएगा। यदि यह पहले मौजूद था, तो इसे काट दिया जाएगा।
यहाँ दस्तावेज़ के साथ कमांड निष्पादित करें
ssh -p 21 [email protected] <<EOF
echo 'printing pwd'
echo "\$(pwd)"
ls -a
find '*.txt'
EOF
$
बच गया है क्योंकि हम नहीं चाहते हैं कि इसे मौजूदा शेल द्वारा विस्तारित किया जाए यानी $(pwd)
को दूरस्थ शेल पर निष्पादित किया जाए।
दूसरा रास्ता:
ssh -p 21 [email protected] <<'EOF'
echo 'printing pwd'
echo "$(pwd)"
ls -a
find '*.txt'
EOF
नोट : समापन EOF लाइन की शुरुआत में होना चाहिए (पहले कोई व्हाट्सएप नहीं)। यदि इंडेंटेशन की आवश्यकता है, तो टैब का उपयोग किया जा सकता है यदि आप अपने हेरेडोक को <<-
साथ शुरू करते हैं। अधिक जानकारी के लिए दस्तावेज़ और सीमा के उदाहरण यहां इंडेंटिंग देखें।
सूडो के साथ कई कमांड चलाएं
sudo -s <<EOF
a='var'
echo 'Running serveral commands with sudo'
mktemp -d
echo "\$a"
EOF
- मौजूदा शेल द्वारा इसका विस्तार करने से रोकने के लिए
$a
बच जाने की जरूरत है
या
sudo -s <<'EOF'
a='var'
echo 'Running serveral commands with sudo'
mktemp -d
echo "$a"
EOF