Mengapa pengalihan ke file yang sama memotong file?

11

Biasanya kami menggunakan file yang berbeda untuk mengarahkan output.

Sebagai contoh :

cat < first > temp

Dalam perintah ini, isi pertama diarahkan ke temp bukan output standar.

Lalu mengapa itu memotong file jika saya menggunakan nama file yang sama?

Mengapa tidak bisa menimpa file yang sama?

cat < first > first 
Searock
sumber

Jawaban:

19

Saat Anda menggunakan pengalihan I / O seperti itu, file "input" & "output" dibuka oleh shell sebelum perintah dieksekusi. Dan membuka file untuk menimpa sama dengan memotongnya sebelum menulis. Hasilnya: catmelihat file kosong pada input ...

JanC
sumber
0

Karena penanganannya dalam kasus umum akan sangat rumit. Perhatikan saja contoh berikut:

Suatu program membaca file baris demi baris dan mengeluarkan setiap baris dua kali. Sekarang agar ini berfungsi tanpa file kedua (yaitu pada file yang sama) program perlu buffer sebagian besar (semua) baris yang akan dibaca, karena mereka akan ditimpa kalau tidak sebelum mereka dapat dibaca.

Untuk menjaga masalah, program-program sederhana biasanya menggunakan file sekunder sementara yang mereka pindahkan dari yang asli begitu selesai. Ini misalnya cara kerja sed -i(inline).

Grey Panther
sumber
0

Biasanya sintaks untuk redirect dalam hal ini seharusnya cat first > temp. Ini berarti bahwa catkeluaran firstdikirim ke file temp. Dalam hal pernyataan Anda cat < first > temp, output catbelum selesai pada saat itu diarahkan untuk keluar lagi. Tidak ada yang menghasilkan tidak ada yang keluar.

Namun catfile dan output yang diarahkan ke file lain tidak berbeda dengan file dasar cp.

Casey Keller
sumber
cat < first > tempberfungsi dengan baik.
JanC