जवाबों:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
आप किसी फ़ाइल में कमांड के आउटपुट को रीडायरेक्ट कर सकते हैं:
$ cat file > copy_file
या इसे संलग्न करें
$ cat file >> copy_file
यदि आप सीधे लिखना चाहते हैं तो कमांड है echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(उपरोक्त लुकसेरट की टिप्पणी के लिए धन्यवाद)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txt
तब भी कर सकते हैं जब आप कर रहे हों तब ctrl + D दबाएं ।
मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन जैसा कि ओपी स्क्रिप्टिंग के बारे में है, और इस तथ्य के लिए कि Google मुझे यहां लाया है, उसी समय पढ़ने और लिखने के लिए फ़ाइल डिस्क्रिप्टर खोलने का भी उल्लेख किया जाना चाहिए।
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
फिर cat
टर्मिनल पर फ़ाइल
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
यह उदाहरण फ़ाइल poem.txt का कारण बनता है, जो फ़ाइल डिस्क्रिप्टर 3 पर पढ़ने और लिखने के लिए खुला रहता है। यह यह भी दर्शाता है कि * nix बक्से को अधिक fd का पता है, फिर स्टडआउट, stdout और stderr (fd 0,1,2)। यह वास्तव में बहुत कुछ रखती है। आमतौर पर कर्नेल को आवंटित किए जा सकने वाले फ़ाइल डिस्क्रिप्टर की अधिकतम संख्या में पाया जा सकता है /proc/sys/file-max
या /proc/sys/fs/file-max
9 से ऊपर किसी भी fd का उपयोग करना खतरनाक है क्योंकि यह आंतरिक रूप से शेल द्वारा उपयोग किए जाने वाले fd के साथ संघर्ष कर सकता है। तो परेशान न हों और केवल fd के 0-9 का उपयोग करें। यदि आपको एक bash स्क्रिप्ट में 9 फ़ाइल डिस्क्रिप्टर की अधिक आवश्यकता है, तो आपको किसी अन्य भाषा का उपयोग करना चाहिए :)
किसी भी तरह, एफडी का उपयोग कई दिलचस्प तरीकों से किया जा सकता है।
मुझे यह उत्तर पसंद है:
cat > FILE.txt <<EOF
info code info
...
EOF
लेकिन सुझाव है कि cat >> FILE.txt << EOF
यदि आप चाहते हैं कि फ़ाइल के अंत में कुछ मिटाए बिना जो पहले से मौजूद है, उसे मिटाए बिना
ऐशे ही:
cat >> FILE.txt <<EOF
info code info
...
EOF
एक उत्तर के रूप में मेरी टिप्पणी को आगे बढ़ाते हुए, @lycono द्वारा अनुरोध किया गया
यदि आपको रूट विशेषाधिकारों के साथ ऐसा करने की आवश्यकता है, तो इसे इस तरह से करें:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
केवल tee
जड़ के रूप में चलाने की कोशिश करें ।
उन परिवेशों के लिए जहां दस्तावेज़ उपलब्ध नहीं हैं ( Makefile
और Dockerfile
, आदि) आप अक्सर printf
एक उचित और कुशल समाधान के लिए उपयोग कर सकते हैं।
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
मैंने सोचा था कि कुछ पूरी तरह से ठीक जवाब थे, लेकिन सभी संभावनाओं का कोई संक्षिप्त सारांश नहीं; इस प्रकार:
यहां अधिकांश उत्तरों के पीछे मूल प्रमुख पुनर्निर्देशन है । फ़ाइलों को लिखने के लिए दो महत्वपूर्ण पुनर्निर्देशन ऑपरेटर हैं:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
अन्य लोगों ने उल्लेख किया, जैसे कि एक निश्चित इनपुट स्रोत से echo 'text'
, आप एक इंटरएक्टिव फाइल को "हियर डॉक्यूमेंट" के माध्यम से लिख सकते हैं, जो ऊपर दिए गए बैश मैनुअल के लिंक में भी विस्तृत हैं। वे जवाब, जैसे
cat > FILE.txt <<EOF
या cat >> FILE.txt <<EOF
एक ही पुनर्निर्देशन ऑपरेटरों का उपयोग करें, लेकिन "यहां दस्तावेज़" के माध्यम से एक और परत जोड़ें। उपरोक्त सिंटैक्स में, आप FILE.txt को आउटपुट के माध्यम से लिखते हैं cat
। इंटरएक्टिव इनपुट कुछ विशिष्ट स्ट्रिंग दिए जाने के बाद ही लेखन होता है, इस मामले में 'EOF', लेकिन यह कोई भी स्ट्रिंग हो सकता है, जैसे:
cat > FILE.txt <<'StopEverything'
या cat >> FILE.txt <<'StopEverything'
साथ ही काम करेगा। यहां दस्तावेज़ विभिन्न सीमांकक और अन्य दिलचस्प पार्सिंग पात्रों की तलाश करते हैं, इसलिए उस पर आगे की जानकारी के लिए डॉक्स पर एक नज़र डालें।
थोड़ा पुनर्निर्धारित, और रीडायरेक्शन और यहाँ दस्तावेज़ दस्तावेज़ सिंटैक्स दोनों को समझने में अधिक अभ्यास, लेकिन आप यहाँ स्ट्रिंग के बनने के लिए मानक रीडायरेक्ट ऑपरेटरों के साथ दस्तावेज़ शैली सिंटैक्स को जोड़ सकते हैं:
बिल्ली इनपुट का पुनर्निर्देशन आउटपुटcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
यहां दस्तावेज़ और vi का भी उपयोग किया जा सकता है, नीचे दी गई स्क्रिप्ट 3 लाइनों और चर प्रक्षेप के साथ एक FILE.txt उत्पन्न करती है
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
फिर फ़ाइल में नीचे 3 लाइनें होंगी। "मैं" vi आवेषण मोड शुरू करने के लिए है और इसी तरह Esc और ZZ के साथ फाइल को बंद करने के लिए है।
#This is my var in text file
var = Test
#Thats end of text file