Yanıtlar:
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
Bir komutun çıktısını bir dosyaya yeniden yönlendirebilirsiniz:
$ cat file > copy_file
ya da ona ekle
$ cat file >> copy_file
Doğrudan yazmak istiyorsanız komut echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(lukaserat'ın yukarıdaki yorumu sayesinde)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
Bunun çok eski bir soru olduğunu biliyorum, ancak OP komut dosyası yazmakla ilgili olduğundan ve google'ın beni buraya getirdiği için, aynı zamanda okuma ve yazma için dosya tanımlayıcılarının açılması da belirtilmelidir.
#!/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>&-
Sonra cat
terminaldeki dosya
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Bu örnek poem.txt dosyasının dosya tanımlayıcı 3'te okuma ve yazma için açık olmasına neden olur. Aslında çok şey tutuyor. Genellikle, çekirdeğin ayırabileceği maksimum dosya tanımlayıcı sayısı bulunabilir /proc/sys/file-max
veya /proc/sys/fs/file-max
9'un üzerinde herhangi bir fd kullanmak, kabuk tarafından dahili olarak kullanılan fd'lerle çakışabileceğinden tehlikelidir. Bu yüzden rahatsız etmeyin ve sadece fd 0-9 kullanın. Bir bash betiğinde daha fazla 9 dosya tanıtıcısına ihtiyacınız varsa, yine de farklı bir dil kullanmalısınız :)
Her neyse, fd'ler birçok ilginç şekilde kullanılabilir.
Bu cevabı beğendim:
cat > FILE.txt <<EOF
info code info
...
EOF
ancak cat >> FILE.txt << EOF
zaten var olanları silmeden dosyanın sonuna bir şey eklemek isterseniz
Bunun gibi:
cat >> FILE.txt <<EOF
info code info
...
EOF
@Lycono tarafından istendiği gibi yorumumu yanıt olarak taşıma
Bunu kök ayrıcalıklarıyla yapmanız gerekiyorsa, şu şekilde yapın:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
Yalnızca tee
root olarak çalıştırmayı deneyin .
Burada belgelerin kullanılamadığı ( Makefile
, Dockerfile
vb.) Ortamlar printf
için genellikle makul bir şekilde okunabilir ve verimli bir çözüm için kullanabilirsiniz.
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
Birkaç mükemmel cevap olduğunu düşündüm, ancak tüm olasılıkların kısa bir özeti yoktu; Böylece:
Buradaki çoğu cevabın ardındaki temel prensip yeniden yönlendirme . İkisi dosyalara yazmak için önemli yönlendirme operatörleridir:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
Diğerleri, sabit bir giriş kaynağından ziyade echo 'text'
, yukarıdaki bash kılavuzunun bağlantısında da ayrıntılı olarak açıklanan "Here Document" ile etkileşimli olarak dosyalara yazabilirsiniz. Bu cevaplar, ör.
cat > FILE.txt <<EOF
veya cat >> FILE.txt <<EOF
aynı yönlendirme işleçlerinden yararlanın, ancak "Here Documents" ile başka bir katman ekleyin. Yukarıdaki sözdiziminde, FILE.txt dosyasına çıktısını yazarakcat
. Yazma yalnızca etkileşimli girdiye belirli bir dize verildikten sonra gerçekleşir, bu durumda 'EOF', ancak bu herhangi bir dize olabilir, örneğin:
cat > FILE.txt <<'StopEverything'
veya cat >> FILE.txt <<'StopEverything'
aynen işe yarar. Burada Belgeler ayrıca çeşitli sınırlayıcıları ve diğer ilginç ayrıştırma karakterlerini arar, bu nedenle daha fazla bilgi için dokümanlara bakın.
Biraz kıvrık ve hem yeniden yönlendirme hem de Here Documents sözdizimini anlamaya yönelik bir alıştırma, ancak Here Dokümanı sözdizimini standart yönlendirme işleçleriyle birleştirerek Here String'i oluşturabilirsiniz:
Cat Girişinin Yeniden Yönlendirilmesicat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Burada belge ve vi da kullanabilir, aşağıdaki komut dosyası 3 satır ve değişken enterpolasyon ile bir FILE.txt oluşturur
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
Sonra dosya aşağıdaki gibi 3 satır olacaktır. "i" vi ekleme modunu başlatmak ve benzer şekilde dosyayı Esc ve ZZ ile kapatmaktır.
#This is my var in text file
var = Test
#Thats end of text file