खोज…


यहां दस्तावेजों को प्रस्तुत करना

आप पाठ के अंदर यहां इंडेंट कर सकते हैं टैब के साथ दस्तावेजों, आप का उपयोग करने की आवश्यकता है <<- बजाय पुनर्निर्देशन ऑपरेटर << :

$ 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

यह पढ़ने के लिए बहुत अप्रिय है, और यह अधिक जटिल यथार्थवादी स्क्रिप्ट में बहुत खराब हो जाता है।

यहाँ तार

2.05b

आप इस तरह से तार का उपयोग कर एक आदेश फ़ीड कर सकते हैं:

$ 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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow