La edición del archivo de texto con Vim no actualiza la cola -f

17

Estoy usando tail -f a.txtpara ver actualizaciones en un archivo llamado a.txt.

Si actualizo el archivo usando algo como ls -a >> a.txten una segunda consola virtual, los cambios se mostrarán en tiempo real en la primera.

Si puedo actualizar el archivo con Vim en una segunda consola virtual, los cambios no se mostrarán en la primera.

Yo no necesariamente esperaba que desencadenan una actualización en esa ventana - pero ¿por qué no lo hace exactamente esta actualización del terminal que ejecuta el tail -fcomando?

alex
fuente
55
tail -fcheques para APPENDs. tail -Fcomprueba si hay cambios de nombre de archivo.
thrig

Respuestas:

31

Si edita un archivo con vim, normalmente lee el archivo en la memoria y luego escribe un nuevo archivo. Así tailque ahora está operando en una copia desactualizada del archivo (que permanece en el sistema de archivos hasta que tail(y cualquier otro programa) deja de usarlo).

Puede hacer que tailsiga el nombre del archivo (en lugar del archivo) usando:

tail -F yourfile  

Tenga en cuenta la mayúscula F .

Bob ansioso
fuente
1
tail -F¡trabajos! La consola muestra ahora un mensaje como "ha sido reemplazado a.txt: siguiendo final del nuevo archivo" y cambios en consecuencia. ¡Gracias!
alex
8

Tengo entendido que, por lo general, cuando edita con vim, está editando una copia del archivo, que se coloca en su lugar cuando escribe los cambios en el disco. Dado que esto sucede al colocar unlinkel original y movecolocar el nuevo en su lugar, tailno ve nuevos cambios en el archivo original.

DopeGhoti
fuente