La modifica del file di testo con Vim non aggiorna tail -f


17

Sto usando tail -f a.txtper guardare gli aggiornamenti su un file chiamato a.txt.

Se aggiorno il file usando qualcosa di simile ls -a >> a.txta una seconda console virtuale, le modifiche verranno visualizzate in tempo reale nella prima.

Se aggiorno il file utilizzando Vim in una seconda console virtuale, le modifiche non verranno visualizzate nella prima.

Non mi aspetto necessariamente che attivi un aggiornamento in quella finestra, ma perché esattamente questo non aggiorna il terminale che esegue il tail -fcomando?


5
tail -fcontrolla gli allegati. tail -Fcontrolla i nomi dei file.
thrig

Risposte:


31

Se si modifica un file con vim, in genere legge il file in memoria, quindi scrive un nuovo file. Quindi tailora funziona su una copia obsoleta del file (che rimane nel file system fino a quando tail(e qualsiasi altro programma) non smette di usarlo.

Puoi fare tailseguire il nome del file (anziché il file) usando:

tail -F yourfile  

Nota il maiuscolo F .


1
tail -Flavori! La console ora visualizza un messaggio come "a.txt è stato sostituito: dopo la fine del nuovo file" e si aggiorna di conseguenza. Grazie!
alex

8

La mia comprensione è che in genere durante la modifica con vim, si sta modificando una copia del file, che viene spostato in posizione quando si scrivono le modifiche sul disco. Dal momento che ciò accade unlinkinserendo l'originale e moveinserendo il nuovo in posizione, tailnon vengono visualizzate nuove modifiche al file originale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.