Mengedit file teks dengan Vim tidak memperbarui tail -f

17

Saya menggunakan tail -f a.txtuntuk menonton pembaruan pada file bernama a.txt.

Jika saya memperbarui file menggunakan sesuatu seperti ls -a >> a.txtdi konsol virtual kedua, perubahan akan ditampilkan secara real-time di yang pertama.

Jika saya memperbarui file menggunakan Vim di konsol virtual kedua, perubahan tidak akan ditampilkan di yang pertama.

Saya tidak selalu berharap untuk memicu pembaruan di jendela itu - tetapi mengapa sebenarnya ini tidak memperbarui terminal yang menjalankan tail -fperintah?

alex
sumber
5
tail -fmemeriksa penambahan. tail -Fmemeriksa nama file.
thrig

Jawaban:

31

Jika Anda mengedit file dengan vim, biasanya file itu membaca file ke dalam memori, kemudian menulis file baru. Jadi tailsekarang beroperasi pada salinan file yang kedaluwarsa (yang tetap berada dalam sistem file hingga tail(dan program lainnya) berhenti menggunakannya.

Anda dapat tailmengikuti nama file (bukan file) dengan menggunakan:

tail -F yourfile  

Perhatikan huruf besar F .

Bob Eager
sumber
1
tail -Fbekerja! Konsol sekarang menampilkan pesan seperti "a.txt telah diganti: mengikuti akhir file baru" dan memperbarui sesuai. Terima kasih!
alex
8

Pemahaman saya adalah bahwa biasanya ketika mengedit dengan vim, Anda mengedit salinan file, yang dipindahkan ke tempatnya ketika Anda menulis perubahan Anda ke disk. Karena ini terjadi dengan unlinkmemasukkan yang asli dan moveyang baru ke tempatnya, tailtidak melihat perubahan baru pada file asli.

DopeGhoti
sumber