Katakanlah file yang dipanggil abc
ada di direktori saat ini dan memiliki beberapa teks di dalamnya. Saat Anda menjalankan perintah:
cat abc > abc
Mengapa isi file abc
hilang?
Mengapa perintah menghapus teks di dalamnya dan file menjadi file kosong?
files
io-redirection
cat
Tulsi Kanodia
sumber
sumber
cut
perubahan file pada tempatnya?cat abc | dog abc
tee
.Jawaban:
Karena urutan bagaimana segala sesuatu dilakukan.
Saat kamu melakukan:
>
adalah operator redirection output, ketika shell melihat ini ia membuka file dalam mode pemotongan menggunakanO_TRUNC
flagopen(2)
yaituopen("abc", O_TRUNC)
, jadi apa pun yang ada di dalam file akan hilang. Perhatikan bahwa, pengalihan ini dilakukan terlebih dahulu oleh shell sebelumcat
perintah dijalankan.Jadi ketika perintah
cat abc
dijalankan, fileabc
sudah terpotong makacat
akan menemukan file kosong.sumber
cat: filename: input file is output file
(di manafilename
nama file yang Anda pilih) dicetak pada stdout lama.Menambahkan ke jawaban @ heemayl , jika Anda ingin kode menjadi lebih jelas tentang urutan di mana hal-hal terjadi, Anda bisa meletakkan pengalihan apa saja di awal perintah:
sumber