Jawaban:
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
Anda dapat mengarahkan output perintah ke file:
$ cat file > copy_file
atau menambahkannya
$ cat file >> copy_file
Jika Anda ingin menulis secara langsung, perintahnya adalah echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'(terima kasih atas komentar lukaserat di atas)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txtkemudian tekan ctrl + D ketika Anda selesai .
Saya tahu ini adalah pertanyaan lama, tetapi karena OP adalah tentang scripting, dan fakta bahwa google membawa saya ke sini, membuka file deskriptor untuk membaca dan menulis pada saat yang sama juga harus disebutkan.
#!/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>&-
Kemudian catfile di terminal
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Contoh ini menyebabkan file poem.txt terbuka untuk dibaca dan ditulis pada deskriptor file 3. Ini juga menunjukkan bahwa * kotak nix tahu lebih banyak fd daripada hanya stdin, stdout dan stderr (fd 0,1,2). Ini benar-benar memegang banyak hal. Biasanya jumlah maksimum deskriptor file yang dapat dialokasikan oleh kernel dapat ditemukan di /proc/sys/file-maxatau /proc/sys/fs/file-maxtetapi menggunakan fd di atas 9 berbahaya karena dapat bertentangan dengan fd yang digunakan oleh shell secara internal. Jadi jangan repot-repot dan hanya menggunakan fd 0-9. Jika Anda membutuhkan lebih banyak 9 deskriptor file dalam skrip bash, Anda harus menggunakan bahasa yang berbeda pula :)
Bagaimanapun, fd dapat digunakan dalam banyak cara menarik.
Saya suka jawaban ini:
cat > FILE.txt <<EOF
info code info
...
EOF
tetapi akan menyarankan cat >> FILE.txt << EOFjika Anda ingin menambahkan sesuatu ke akhir file tanpa memusnahkan apa yang sudah ada
Seperti ini:
cat >> FILE.txt <<EOF
info code info
...
EOF
Memindahkan komentar saya sebagai jawaban, seperti yang diminta oleh @lycono
Jika Anda perlu melakukan ini dengan hak akses root, lakukan seperti ini:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/nullhanya berjalan teesebagai root.
Untuk lingkungan di mana di sini dokumen tidak tersedia (Makefile , Dockerfile, dll) Anda dapat sering menggunakan printfuntuk solusi cukup terbaca dan efisien.
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
Saya pikir ada beberapa jawaban yang sangat bagus, tetapi tidak ada ringkasan singkat dari semua kemungkinan; jadi:
Prinsip utama di balik sebagian besar jawaban di sini adalah pengalihan . Dua operator pengalihan penting untuk menulis ke file:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
Lainnya menyebutkan, daripada dari sumber input tetap seperti echo 'text' , Anda juga bisa secara interaktif menulis ke file melalui "Dokumen Di Sini", yang juga dirinci dalam tautan ke bash manual di atas. Jawaban itu, mis
cat > FILE.txt <<EOF atau cat >> FILE.txt <<EOF
memanfaatkan operator pengalihan yang sama, tetapi tambahkan lapisan lain melalui "Dokumen Di Sini". Dalam sintaks di atas, Anda menulis ke FILE.txt melalui output dari cat. Penulisan hanya terjadi setelah input interaktif diberikan beberapa string tertentu, dalam hal ini 'EOF', tetapi ini bisa berupa string apa pun, misalnya:
cat > FILE.txt <<'StopEverything' atau cat >> FILE.txt <<'StopEverything'
akan bekerja dengan baik. Di sini Documents juga mencari berbagai pembatas dan karakter parsing yang menarik lainnya, jadi lihat dokumen untuk info lebih lanjut tentang itu.
Agak berbelit-belit, dan lebih merupakan latihan dalam memahami sintaks pengalihan dan Here Documents, tetapi Anda bisa menggabungkan sintaksis gaya dokumen sini dengan operator pengarah standar untuk menjadi String di sini:
Mengarahkan Output dari Input kucingcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Dapat juga menggunakan dokumen dan vi di sini, skrip di bawah ini menghasilkan FILE.txt dengan 3 baris dan interpolasi variabel
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
Maka file akan memiliki 3 baris seperti di bawah ini. "i" adalah untuk memulai mode memasukkan vi dan juga untuk menutup file dengan Esc dan ZZ.
#This is my var in text file
var = Test
#Thats end of text file