किरदार में आप कैसे बचते हैं?


22

मैं बैश स्क्रिप्ट के साथ काम कर रहा हूं, अपने हेरेडोक के अंदर चरों को बदलने के प्रयास से इसे रोकने की कोशिश कर रहा हूं। या तो A को हर्डोक सेट कैसे करें) उन्हें पार्स करने के बजाय वेरिएबल नामों से बचें या B) पूरे स्ट्रिंग को अछूता नहीं लौटाते हैं?

cat > /etc/nginx/sites-available/default_php <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/$host; <--- $host is a problem child
}
END

जैसा कि, जब मैं इसे एक फ़ाइल में इंजेक्ट कर रहा हूं, तो मैं इसके साथ बचा हुआ हूं:

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}

जवाबों:


33

से bash(1)आदमी पेज:

यदि शब्द के किसी भी अक्षर को उद्धृत किया जाता है, तो सीमांकक शब्द पर उद्धरण हटाने का परिणाम है , और यहाँ-दस्तावेज़ में लाइनों का विस्तार नहीं किया गया है।

cat > /etc/nginx/sites-available/default_php <<"END"

3
+1 "सीमा स्ट्रिंग" से बचना भी काम करता है ( \END)। Tldp.org/LDP/abs/html/here-docs.html#EX71C
जॉन मैक्कार्थी

एकल उद्धरण भी काम करते हैं
जोआओ कोस्टा

एक ही तंत्र Korn खोल (ksh) के लिए काम करता है।
२०:

19

बस एक बैकस्लैश के साथ:

cat > /tmp/boeboe <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/\$host';
}
END

क्या आप जानते हैं कि हर एक से बचने के बिना चर मानों के इंजेक्शन को कैसे निष्क्रिय किया जाए?
Xeoncross

2
इग्नासियो ने क्या कहा, लेकिन मुझे नहीं पता था कि :)
हाफगॉर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.