El comando tail no muestra la última línea.

El comando tail no muestra la última línea.

Estoy usando el siguiente comando para leer la última línea cada vez que cambia el archivo.

tail -f -n1 Entrie.txt

Pasa que la primera linea escrita lo muestra sin problemas, pero luego cuando escribo la segunda me tira el siguiente error

tail: Entrie.txt: file truncated

Después de mostrar ese error, muestra todos los valores escritos en el archivo. Pero no es solo eso, después de escribir muchas líneas el error deja de salir y se soluciona, sino que necesito que funcione siempre bien.

Estoy ejecutando este comando en Linux.

Estoy agregando líneas al archivo en un editor y guardándolo.

Respuesta1

Puede modificar el archivo escribiendo una nueva versión del mismo o agregando datos a la actual.

Ejemplo en shell:

  • date > sample_file.txt- recrea el archivo con texto nuevo (salida del datecomando)
  • date >> sample_file.txt- agrega texto al archivo actual

Primer caso: su archivo ha sido truncado (contenido eliminado y recreado, se puede hacer con una simple "escritura" en el editor de texto) y tailadvierte sobre esto. Segundo caso: tailfunciona como pretendía.

Respuesta2

Cuando un editor de texto guarda un archivo, lo que sucede muy a menudo es que lo guarda en untemporarioarchivo, vacía (trunca) el archivo original y copia el contenido del archivo temporal al archivo original. Lo hace para no alterar los permisos, la propiedad y otros metadatos del archivo original.

Esto significa que desde la perspectiva de tail, el archivo se trunca (se vacía), por lo que comienza a mostrar la última línea del archivo.mientras el editor lo está reescribiendo(es por eso que muestra el archivo completo).

Para agregar líneas al archivo de tal manera que su tailcomando siempre muestre solo la última línea del archivo y nada más, deberá asegurarse deadjuntarlíneas al archivo. Dado que los editores de texto generalmentevolver a escribirel archivo, es posible que tengas que hacerlo por otros medios.

Una forma muy básica de agregar datos a un archivo es mediante cat:

cat >>Entrie.txt

Esto haría que catse agregue al archivo Entrie.txt. Esperará su entrada y podrá escribir directamente en el archivo desde la terminal. La línea actual se escribe al final del archivo tan pronto como presiona Enter. Para dejar de ingresar datos, presione Ctrl+Den una línea vacía.

Obviamente, esto no le da ninguna oportunidad de corregir lo que ha escrito en las líneas anteriores una vez que presiona Enter.

Otra alternativa sería editar las nuevas líneas en un archivo separado, por ejemplo additions.txt, con su editor. Guarde ese archivo y luego haga

cat additions.txt >>Entrie.txt

Esto agregaría el contenido completo de additions.txtal final del archivo Entrie.txt.

información relacionada