दिलचस्प पोस्ट
क्या मैं WKWebView द्वारा उपयोग की जाने वाली कुकी सेट कर सकता हूं? मैं कैसे परीक्षण कर सकता हूँ अगर स्ट्रिंग में कोई अक्षर जावास्क्रिप्ट का उपयोग कर अपरकेस या लोअरकेस है? जुड़ने और पंक्ति-आधारित सीमित (पेजिंग) के साथ सीतनिद्रा में विशिष्ट परिणाम कैसे प्राप्त करें? क्या पीडीओ एसक्यूएल इंजेक्शन को रोकने के लिए पर्याप्त बयान तैयार करता है? : अपरिचित चयनकर्ता को उदाहरण के लिए भेजा गया फोरट्रान अपरिवर्तित फ़ाइल प्रारूप ActionBarSherlock – प्रत्येक एक्शनबार के आइकन के पैडिंग को कैसे सेट करें? R: मुखौटे वाला कार्य आईओएस में अपनी स्वयं के यूआरएल यूआरएल को संभालने के लिए संभव है? पायथन में सीएसवी एक अतिरिक्त कैरिज रिटर्न जोड़ना एनजीएक्स – रूट और उपनाम के साथ भ्रष्टाचार की सेवा देने वाली स्थिर फ़ाइल कोणीय 2 आंतरिक एचटीएमएल (क्लिक) बाइंडिंग ओरेकल में वर्कर और वर्चार 2 के बीच क्या अंतर है? माध्यमिक मॉनिटर पर फ़ुलस्क्रीन जा रहा है ऐप पर हस्ताक्षर करने के लिए मुझे किस चीजस्टोर का उपयोग किया गया था?

मैं बाश स्क्रिप्ट में एक फ़ाइल में हेरडॉक कैसे लिख सकता / सकती हूं?

मैं बाश स्क्रिप्ट में एक फ़ाइल में एक दस्तावेज कैसे लिख सकता हूं?

वेब के समाधान से एकत्रित समाधान "मैं बाश स्क्रिप्ट में एक फ़ाइल में हेरडॉक कैसे लिख सकता / सकती हूं?"

उन्नत बैश-स्क्रिप्टिंग गाइड अध्याय 19. यहां दस्तावेज़ पढ़ें।

यहाँ एक उदाहरण है जो /tmp/yourfilehere पर एक फ़ाइल में सामग्री लिखेंगे

 cat << EOF > /tmp/yourfilehere These contents will be written to the file. This line is indented. EOF 

ध्यान दें कि अंतिम ' LimitString ' ( LimitString ) को शब्द के सामने कोई भी सफेद स्थान नहीं होना चाहिए, क्योंकि इसका मतलब है कि LimitString को मान्यता नहीं दी जाएगी।

एक खोल स्क्रिप्ट में, आप कोड को पठनीय बनाने के लिए इंडेंटेशन का उपयोग करना चाह सकते हैं, हालांकि यह आपके यहां दस्तावेज़ में टेक्स्ट को इंडेंट करने का अवांछनीय प्रभाव हो सकता है। इस मामले में, अग्रसारण टैब को अक्षम करने के लिए <<- (डैश के बाद) का उपयोग करें ( ध्यान दें कि इसे परीक्षण करने के लिए आपको एक टैब वर्ण के साथ अग्रणी व्हाइटस्पेस को बदलना होगा, क्योंकि मैं यहां वास्तविक टैब वर्णों को प्रिंट नहीं कर सकता।)

 #!/usr/bin/env bash if true ; then cat <<- EOF > /tmp/yourfilehere The leading tab is ignored. EOF fi 

यदि आप पाठ में वेरिएबल व्याख्या नहीं करना चाहते हैं, तो एकल उद्धरणों का उपयोग करें:

 cat << 'EOF' > /tmp/yourfilehere The variable $FOO will not be interpreted. EOF 

कमांड पाइपलाइन के माध्यम से हेरडॉक पाइप करने के लिए:

 cat <<'EOF' | sed 's/a/b/' foo bar baz EOF 

आउटपुट:

 foo bbr bbz 

… या sudo का उपयोग कर एक फ़ाइल में heredoc लिखने के लिए:

 cat <<'EOF' | sed 's/a/b/' | sudo tee /etc/config_file.conf foo bar baz EOF 

cat और I / O रीडायरेक्शन का उपयोग करने के बजाय इसके बजाय tee का उपयोग करना उपयोगी हो सकता है:

 tee newfile <<EOF line 1 line 2 line 3 EOF 

यह अधिक संक्षिप्त है, और रीडायरेक्ट ऑपरेटर के विपरीत, इसे रूट के साथ जोड़ा जा सकता है यदि आपको रूट अनुमतियों वाले फाइलों में लिखना है।

ध्यान दें:

  • निम्नलिखित संक्षेपण और इस धागे में अन्य उत्तरों का आयोजन करता है, स्टीफन लासविस्की और सर्ज स्ट्रोबैंट
  • Lasiewski और मैं अनुशंसित 1 9 (यहाँ दस्तावेज़) उन्नत बैश-स्क्रिप्टिंग गाइड में सलाह देते हैं

सवाल (कैसे एक बाँट स्क्रिप्ट में एक फाइल करने के लिए एक यहाँ दस्तावेज़ (उर्फ heredoc ) लिखने के लिए?) (कम से कम) 3 मुख्य स्वतंत्र आयाम या subquestions है:

  1. क्या आप किसी मौजूदा फ़ाइल को अधिलेखित करना चाहते हैं, किसी मौजूदा फ़ाइल में जोड़ना चाहते हैं, या एक नई फ़ाइल में लिखना चाहते हैं?
  2. क्या आपका उपयोगकर्ता या अन्य उपयोगकर्ता (उदाहरण के लिए, root ) फ़ाइल ही है?
  3. क्या आप अपने heredoc की सामग्री को शाब्दिक रूप से लिखना चाहते हैं, या आपके हेरेडॉक के अंदर चर संदर्भों का वर्णन करना है?

(अन्य आयाम / उपक्षेत्र हैं जो मुझे महत्वपूर्ण नहीं मानते हैं। उन्हें जोड़ने के लिए इस उत्तर को संपादित करने के बारे में सोचें!) यहां ऊपर दिए गए प्रश्न के आयामों के कुछ महत्वपूर्ण संयोजन हैं, विभिन्न अलग-अलग सीमा पहचानकर्ताओं के साथ – कुछ भी नहीं है ईओएफ के बारे में पवित्र, बस यह सुनिश्चित करें कि जिस स्ट्रिंग का आप उपयोग करते हैं वह अपने सीमांकित पहचानकर्ता आपके heredoc के अंदर नहीं होता है:

  1. हेरेडॉक के भीतर चर संदर्भों को प्रतिस्थापित करते हुए, एक मौजूदा फाइल को अधिलेखित करने के लिए (या एक नई फाइल में लिखना) जो आपके पास है:

     cat << EOF > /path/to/your/file This line will write to the file. ${THIS} will also write to the file, with the variable contents substituted. EOF 
  2. हेरेडॉक के भीतर चर संदर्भों को प्रतिस्थापित करते हुए, मौजूदा फ़ाइल को (या नई फाइल में लिखना) संलग्न करने के लिए:

     cat << FOE >> /path/to/your/file This line will write to the file. ${THIS} will also write to the file, with the variable contents substituted. FOE 
  3. हेरेडोक की शाब्दिक सामग्री के साथ, एक मौजूदा फ़ाइल को अधिलेखित करने के लिए (या एक नई फ़ाइल में लिखिए):

     cat << 'END_OF_FILE' > /path/to/your/file This line will write to the file. ${THIS} will also write to the file, without the variable contents substituted. END_OF_FILE 
  4. हेरेडॉक की शाब्दिक सामग्री के साथ एक मौजूदा फ़ाइल (या एक नई फाइल में लिखना) को जोड़ने के लिए जो आपके पास है:

     cat << 'eof' >> /path/to/your/file This line will write to the file. ${THIS} will also write to the file, without the variable contents substituted. eof 
  5. हेरडॉक के भीतर चर संदर्भों को प्रतिस्थापित करते हुए, किसी मौजूदा फ़ाइल को जड़ से स्वामित्व वाली एक मौजूदा फ़ाइल (या नई फ़ाइल में लिखना) पर लिखना है:

     cat << until_it_ends | sudo tee /path/to/your/file This line will write to the file. ${THIS} will also write to the file, with the variable contents substituted. until_it_ends 
  6. उपयोगकर्ता = फू द्वारा स्वामित्व वाली एक मौजूदा फाइल (या नई फाइल में लिखना) को जोड़ने के लिए, हेरेडॉक की शाब्दिक सामग्री के साथ:

     cat << 'Screw_you_Foo' | sudo -u foo tee -a /path/to/your/file This line will write to the file. ${THIS} will also write to the file, without the variable contents substituted. Screw_you_Foo 

@ लिवेन के उत्तर पर निर्माण करने के लिए, यहां कुछ उपयोगी संयोजन हैं

  1. चर प्रतिस्थापन, प्रमुख टैब को बरकरार रखा, अधिलेखित फ़ाइल, stdout पर गूंज

     tee /path/to/file <<EOF ${variable} EOF 
  2. कोई चर प्रतिस्थापन , प्रमुख टैब को बरकरार रखा, फ़ाइल अधिलेखित करें, stdout पर प्रतिध्वनि करें

     tee /path/to/file <<'EOF' ${variable} EOF 
  3. चर प्रतिस्थापन, प्रमुख टैब हटाया गया , फ़ाइल अधिलेखित करें, stdout पर गूंज करें

     tee /path/to/file <<-EOF ${variable} EOF 
  4. चर प्रतिस्थापन, प्रमुख टैब को बरकरार रखा, फ़ाइल संलग्न करने के लिए , stdout पर गूंज

     tee -a /path/to/file <<EOF ${variable} EOF 
  5. चर प्रतिस्थापन, प्रमुख टैब को बरकरार रखा गया, फ़ाइल अधिलेखित करें, stdout पर कोई इको नहीं

     tee /path/to/file <<EOF >/dev/null ${variable} EOF 
  6. उपरोक्त भी sudo के साथ जोड़ा जा सकता है

     sudo -u USER tee /path/to/file <<EOF ${variable} EOF 

ऐसे भविष्य के लोगों के लिए जिनके पास यह समस्या हो सकती है, निम्न प्रारूप काम करता है:

 (cat <<- _EOF_ LogFile /var/log/clamd.log LogTime yes DatabaseDirectory /var/lib/clamav LocalSocket /tmp/clamd.socket TCPAddr 127.0.0.1 SelfCheck 1020 ScanPDF yes _EOF_ ) > /etc/clamd.conf 

जब रूट अनुमतियाँ आवश्यक हैं

गंतव्य फ़ाइल के लिए रूट अनुमतियों की आवश्यकता होती है, तो इसके बजाय > |sudo tee उपयोग करें:

 cat << 'EOF' |sudo tee /tmp/yourprotectedfilehere The variable $FOO will *not* be interpreted. EOF 

उदाहरण के तौर पर आप इसका उपयोग कर सकते हैं:

पहले (एसएसएच कनेक्शन बनाना):

 while read pass port user ip files directs; do sshpass -p$pass scp -o 'StrictHostKeyChecking no' -P $port $files $user@$ip:$directs done <<____HERE PASS PORT USER IP FILES DIRECTS . . . . . . . . . . . . . . . . . . PASS PORT USER IP FILES DIRECTS ____HERE 

दूसरा (कमांड निष्पादित):

 while read pass port user ip; do sshpass -p$pass ssh -p $port $user@$ip <<ENDSSH1 COMMAND 1 . . . COMMAND n ENDSSH1 done <<____HERE PASS PORT USER IP . . . . . . . . . . . . PASS PORT USER IP ____HERE 

तीसरा (कमांड निष्पादित):

 Script=$' #Your commands ' while read pass port user ip; do sshpass -p$pass ssh -o 'StrictHostKeyChecking no' -p $port $user@$ip "$Script" done <<___HERE PASS PORT USER IP . . . . . . . . . . . . PASS PORT USER IP ___HERE 

आगे (चर का उपयोग करके):

 while read pass port user ip fileoutput; do sshpass -p$pass ssh -o 'StrictHostKeyChecking no' -p $port $user@$ip fileinput=$fileinput 'bash -s'<<ENDSSH1 #Your command > $fileinput #Your command > $fileinput ENDSSH1 done <<____HERE PASS PORT USER IP FILE-OUTPUT . . . . . . . . . . . . . . . PASS PORT USER IP FILE-OUTPUT ____HERE