Apa nama operator ini? Saya ingin mencari manual tentang itu.
Vlad T.
96
operator> mengalihkan output ke file yang menimpa file jika ada. >> akan menambahkan ke file yang ada.
Triton Man
4
Terima kasih, ini tautan ke halaman wiki, kalau-kalau ada yang membutuhkannya en.wikipedia.org/wiki/…
Vlad T.
11
Jika Anda perlu melakukan ini dengan hak akses root, lakukan seperti ini:sudo sh -c 'echo "some data for the file" >> fileName'
lukaserat
1
Bagaimana jika teks saya adalah sesuatu seperti ini dan untuk alasan apa pun, saya tidak bisa menggunakan curlatau wget?
asedsami
145
#!/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
Penjelasan tentang kode Anda akan sangat bermanfaat agar lebih bermanfaat bagi orang lain. Bahkan info kosa kata seperti "dokumen di sini" dan "pengalihan" dapat mengarahkan pencari ke sumber lain.
Palpatim
2
Penjelasan tidak begitu diperlukan untuk hal seperti ini.
Bhargav Nanekalva
6
Penjelasan tidak pernah diperlukan ketika Anda sudah tahu jawabannya. Bagi saya kode di atas tidak membantu karena kurang detail.
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.
Anda mungkin ingin menghindari menjalankan shell root hanya untuk mencetak string. Usahakan echo "some data for the file" | sudo tee -a fileName >/dev/nullhanya berjalan teesebagai root.
tripleee
6
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
Komentar Anda di atas Coba gema "beberapa data untuk file" | sudo tee -a fileName> / dev / null untuk hanya menjalankan tee sebagai root. sangat berguna!
Kojo
5
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:
Mengarahkan Output:
echo 'text to completely overwrite contents of myfile' > myfile
Menambah Output yang Diarahkan
echo 'text to add to end of myfile' >> myfile
Di sini Dokumen
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.
Di sini Strings
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 kucing
cat > myfile <<<'text to completely overwrite contents of myfile'
Menambahkan Output yang Diarahkan dari Input kucing
cat >> myfile <<<'text to completely overwrite contents of myfile'
sudo sh -c 'echo "some data for the file" >> fileName'
curl
atauwget
?sumber
Anda dapat mengarahkan output perintah ke file:
atau menambahkannya
Jika Anda ingin menulis secara langsung, perintahnya adalah
echo 'text'
sumber
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(terima kasih atas komentar lukaserat di atas)sumber
cat > FILE.txt
kemudian 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.
Kemudian
cat
file di terminalContoh 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-max
atau/proc/sys/fs/file-max
tetapi 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.
sumber
Saya suka jawaban ini:
tetapi akan menyarankan
cat >> FILE.txt << EOF
jika Anda ingin menambahkan sesuatu ke akhir file tanpa memusnahkan apa yang sudah adaSeperti ini:
sumber
Memindahkan komentar saya sebagai jawaban, seperti yang diminta oleh @lycono
Jika Anda perlu melakukan ini dengan hak akses root, lakukan seperti ini:
sumber
echo "some data for the file" | sudo tee -a fileName >/dev/null
hanya berjalantee
sebagai root.Untuk lingkungan di mana di sini dokumen tidak tersedia (
Makefile
,Dockerfile
, dll) Anda dapat sering menggunakanprintf
untuk solusi cukup terbaca dan efisien.sumber
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:
Mengarahkan Output:
echo 'text to completely overwrite contents of myfile' > myfile
Menambah Output yang Diarahkan
echo 'text to add to end of myfile' >> myfile
Di sini Dokumen
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, miscat > FILE.txt <<EOF
ataucat >> 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'
ataucat >> 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.
Di sini Strings
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 kucing
Menambahkan Output yang Diarahkan dari Input kucingcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
sumber
Dapat juga menggunakan dokumen dan vi di sini, skrip di bawah ini menghasilkan FILE.txt dengan 3 baris dan interpolasi variabel
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.
sumber
ini jawaban saya $ cat file> copy_file
sumber