आपको केवल एक न्यूनतम परिवर्तन की आवश्यकता है; एकल-दस्तावेज़ यहाँ दस्तावेज़ के बाद परिसीमन <<
।
cat <<'EOF' >> brightup.sh
या अनिवार्य रूप से बैकस्लैश-इससे बच जाएं:
cat <<\EOF >>brightup.sh
उद्धृत किए बिना, यहां दस्तावेज़ आपको चर प्रतिस्थापन से गुजरना होगा, बैकटिक्स का मूल्यांकन किया जाएगा, आदि, जैसे आपने खोजा था।
यदि आपको कुछ का विस्तार करने की आवश्यकता है, लेकिन सभी नहीं, मूल्यों, आपको व्यक्तिगत रूप से उन लोगों से बचने की आवश्यकता है जिन्हें आप रोकना चाहते हैं।
cat <<EOF >>brightup.sh
#!/bin/sh
# Created on $(date # : <<-- this will be evaluated before cat;)
echo "\$HOME will not be evaluated because it is backslash-escaped"
EOF
उत्पादन करेंगे
#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"
जैसा कि @fedorqui द्वारा सुझाया गया है , यहाँ से प्रासंगिक अनुभाग है man bash
:
यहाँ दस्तावेज़
इस प्रकार के पुनर्निर्देशन से शेल को वर्तमान स्रोत से इनपुट पढ़ने का निर्देश दिया जाता है जब तक कि केवल सीमांकक (कोई पीछे न हटने वाले रिक्त स्थान) वाली लाइन देखी जाती है। उस बिंदु तक पढ़ी गई सभी लाइनें तब कमांड के लिए मानक इनपुट के रूप में उपयोग की जाती हैं।
यहाँ दस्तावेजों का प्रारूप है:
<<[-]word
here-document
delimiter
कोई पैरामीटर विस्तार, कमांड प्रतिस्थापन, अंकगणितीय विस्तार, या pathname विस्तार शब्द पर किया जाता है। यदि शब्द के किसी भी अक्षर को उद्धृत किया जाता है, तो सीमांकक शब्द पर उद्धरण हटाने का परिणाम है, और यहां दस्तावेज़ में लाइनों का विस्तार नहीं किया गया है। यदि शब्द अयोग्य है, तो यहां दस्तावेज़ की सभी पंक्तियों को पैरामीटर विस्तार, कमांड प्रतिस्थापन और अंकगणितीय विस्तार के अधीन किया गया है । उत्तरार्द्ध मामले में, वर्ण अनुक्रम \ "को नजरअंदाज किया जाता है, और वर्णों को उद्धृत करने के लिए \ _, $, और` का उपयोग किया जाना चाहिए।
#!/bin/bash
और कुछ नहीं होना चाहिए - वही#!
है जो इसे एक वैध शेबंग रेखा में बनाता है, और इसके बाद जो आता है वह दुभाषिया का मार्ग है।