Jika saya ingin membuat isi file2 cocok dengan isi file1 , saya jelas bisa menjalankan cp file1 file2 .
Namun, jika saya ingin melestarikan semuanya tentang file2 kecuali konten—pemilik, izin, atribut yang diperluas, ACL, tautan keras, dll., dll., maka saya tidak ingin menjalankan cp .* Dalam hal ini saya hanya ingin memasukkan isi file1 ke dalam file2 .
Sepertinya yang berikut ini akan melakukannya:
< file1 > file2
Tapi itu tidak berhasil. file2 terpotong untuk apa-apa dan tidak ditulis. Namun,
cat < file1 > file2
memang bekerja.
Saya terkejut karena versi pertama tidak berfungsi.
Apakah versi kedua adalah UUOC? Apakah ada cara untuk melakukan ini tanpa menjalankan perintah, hanya dengan menggunakan pengalihan?
Catatan:Saya sadar bahwa UUOC lebih merupakan poin yang bertele-tele daripada anti-pola yang sebenarnya.
*Seperti yang ditemukan tniles09, cp akan sebenarnya bekerja dalam kasus ini.
Jawaban yang Diterima:
cat < file1 > file2 bukan UUOC. Secara klasik, < dan > lakukan pengalihan yang sesuai dengan duplikasi deskriptor file di tingkat sistem.
Duplikasi deskriptor file sendiri tidak melakukan apa-apa (well, > pengalihan terbuka dengan O_TRUNC , jadi agar akurat, pengalihan keluaran memang memotong file keluaran). Jangan biarkan < > simbol membingungkan Anda. Pengalihan tidak memindahkan data—pengalihan menetapkan deskriptor file ke deskriptor file lain.
Dalam hal ini Anda membuka file1 dan tetapkan deskriptor file itu ke deskriptor file < (<file1 ==0<file1 ) dan file2 dan tetapkan deskriptor file itu ke deskriptor file 1 (>file2 ==1>file2 ).
Sekarang setelah Anda memiliki dua deskriptor file, Anda memerlukan proses untuk menyekop data di antara keduanya—dan itulah yang cat adalah untuk.