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.