por how consola comando archivo svn bash text-files

consola - how to commit svn



¿Cómo detectar el archivo termina en nueva línea? (7)

Deberías poder hacerlo a través de un gancho precompromiso SVN.

Mira este ejemplo .

Over at Can ¿puedes modificar archivos de texto cuando te comprometes a subversión? Grant sugirió que bloqueara commits en su lugar.

Sin embargo, no sé cómo verificar que un archivo termine con una nueva línea. ¿Cómo se puede detectar que el archivo termine con una nueva línea?


Podría usar algo como esto como su script precompromiso:

#! /usr/bin/perl while (<>) { $last = $_; } if (! ($last =~ m//n$/)) { print STDERR "File doesn''t end with //n!/n"; exit 1; }


Usando solo bash :

x=`tail -n 1 your_textfile` if [ "$x" == "" ]; then echo "empty line"; fi

(¡Tenga cuidado de copiar los espacios en blanco correctamente!)

@grom:

la cola no devuelve una línea vacía

Maldita sea. Mi archivo de prueba no finalizó en /n sino en /n/n . Aparentemente vim no puede crear archivos que no terminen en /n (?). De todos modos, siempre y cuando la opción "obtener el último byte" funcione, todo está bien.


O incluso más simple:

#!/bin/sh test `tail -c 1 $1` && echo "no newline at eof: $1"


Trabajó para mi:

tail -n 1 /path/to/newline_at_end.txt | wc --lines # according to "man wc" : --lines - print the newline counts

Entonces, contamos el número de caracteres nuevos, lo cual es bueno en nuestro caso. El oneliner imprime 0 o 1 según la presencia de nueva línea al final del archivo.


Aquí hay una función de bash útil:

function file_ends_with_newline() { [[ $(tail -c1 "$1" | wc -l) -gt 0 ]] }

Puedes usarlo como:

if ! file_ends_with_newline myfile.txt then echo "" >> myfile.txt fi # continue with other stuff that assumes myfile.txt ends with a newline


@Konrad : tail no devuelve una línea vacía. Hice un archivo que tiene un texto que no termina en nueva línea y un archivo que sí lo hace. Aquí está la salida de la cola:

$ cat test_no_newline.txt this file doesn''t end in newline$ $ cat test_with_newline.txt this file ends in newline $

Aunque encontré que la cola tiene la opción de último byte. Así que modifiqué tu script a:

#!/bin/sh c=`tail -c 1 $1` if [ "$c" != "" ]; then echo "no newline"; fi