कैसे चर के साथ बैश का उपयोग कर कई लाइन स्ट्रिंग लिखने के लिए?


232

myconfig.confBASH का उपयोग करके किसी फ़ाइल में मैं बहु-लाइनें कैसे लिख सकता हूं ?

#!/bin/bash
kernel="2.6.39";
distro="xyz";

echo <<< EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4
line ...
EOL >> /etc/myconfig.conf;
cat /etc/myconfig.conf;

जवाबों:


471

वाक्यविन्यास ( <<<) और प्रयुक्त कमांड ( echo) गलत है।

सही होगा:

#!/bin/bash

kernel="2.6.39"
distro="xyz"
cat >/etc/myconfig.conf <<EOL
line 1, ${kernel}
line 2, 
line 3, ${distro}
line 4 line
... 
EOL

cat /etc/myconfig.conf

इस निर्माण को हियर डॉक्यूमेंट के रूप में संदर्भित किया जाता है और इसके तहत बैश मैन पेजों में पाया जा सकता है man --pager='less -p "\s*Here Documents"' bash


49
और अगर आप इसे जोड़ना चाहते हैं तो यह बिल्ली होगा >>
या गाल

19
यह बहुत अच्छा काम करता है, लेकिन आपको यह सुनिश्चित करना होगा कि समाप्ति के सामने कोई व्हाट्सएप नहीं है EOF, अन्यथा इसे पहचाना नहीं जाएगा, और आप फ़ाइल त्रुटि के अनपेक्षित अंत में चले जाएंगे ।
nwinkler

10
@StevenEckhoff इसे एक हेरेडोक कहा जाता है।
विलियम पर्ससेल

4
क्या होगा अगर मुझे फ़ाइल में लिखने के लिए sudo की अनुमति चाहिए?
gfpacheco

14
@gfpacheco आप इसके लिए टी का उपयोग कर सकते हैं, जैसे कि बिल्ली << EOL | सुडो टी /etc/myconfig.conf
शिन चेन

74
#!/bin/bash
kernel="2.6.39";
distro="xyz";

cat > /etc/myconfig.conf << EOL
line 1, ${kernel}
line 2,
line 3, ${distro}
line 4
line ...
EOL

यह वही करता है जो आप चाहते हैं।


6
@ktf मैं तेजी से नहीं, बल्कि आपसे कम अक्षर टाइप कर रहा था। ^ _ *
केंट

35

यदि आप चाहते हैं कि चर को प्रतिस्थापित न किया जाए, तो आपको एकल उद्धरणों के साथ ईओएल को घेरना होगा।

cat >/tmp/myconfig.conf <<'EOL'
line 1, ${kernel}
line 2, 
line 3, ${distro}
line 4 line
... 
EOL

पिछला उदाहरण:

$ cat /tmp/myconfig.conf 
line 1, ${kernel}
line 2, 
line 3, ${distro}
line 4 line
... 

14

वंशानुगत समाधान निश्चित रूप से ऐसा करने का सबसे आम तरीका है। अन्य सामान्य उपाय हैं:

गूंज 'पंक्ति 1,' "$ {कर्नेल}"
लाइन 2,
पंक्ति 3, '"$ {distro}"'
पंक्ति 4 '> /etc/myconfig.conf

तथा

3> & 1 # वर्तमान स्टडआउट सहेजें
exec> /etc/myconfig.conf
इको लाइन 1, $ {कर्नेल}
इको लाइन 2, 
इको लाइन 3, $ {डिस्ट्रो}
...
निष्पादित 1> & 3 # स्टडआउट पुनर्स्थापित करें

शायद यह भी इंगित करता है printfकि अभी तक कुछ और दिलचस्प विविधताएं पेश करती हैं।
त्रिकाल

3

नीचे तंत्र फाइल करने के लिए कई लाइनों को पुनर्निर्देशित करने में मदद करता है। पूर्ण स्ट्रिंग रखें "ताकि हम चर के मानों को पुनर्निर्देशित कर सकें।

#!/bin/bash
kernel="2.6.39"
echo "line 1, ${kernel}
line 2," > a.txt
echo 'line 2, ${kernel}
line 2,' > b.txt

की सामग्री a.txtहै

line 1, 2.6.39
line 2,

की सामग्री b.txtहै

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