Estoy usando svn export
como parte de un script de empaquetador para mi aplicación, y parece que este comando, como muchos otros, no tiene ningún tipo de barra de progreso.
Tengo dos opciones en este momento:
- usarlo sin opciones y verlo imprimir miles de líneas
- usando
--quiet
y sin ver nada hasta que se complete.
¿Hay alguna manera de mostrar al menos el número de líneas que genera el comando en tiempo real? Como:
Exporting SVN directory ... 1234 files
¿Y ves este 1234
incremento de número en tiempo real ? Me imagino canalizando la salida a un comando que haría exactamente esto, pero ¿cuál?
fuente
=
diferencias y peculiaridades feas y `=`. :) ¿Por qué no lo reemplazarían con lenguaje sintaxis similar a python ...printf
termina con a\r
. Y qué pasa si lo hacesecho -ne "$I\r"
oprint -n "$I\r"
. :)printf
Sin embargo, solía , porque el valor predeterminado es no imprimir una nueva línea al final, por lo que\r
solo retrocede al principio. Desafortunadamente, no todas las implementaciones de eco admiten el argumento-e
o-n
.read
aread -r
(ya que, de lo contrario, una barra invertida al final de una línea alteraría el conteo). Por cierto, con un poco de trabajo, esto se puede adaptar para mostrar también la última línea de salida, que puede ser útil para algunos comandos.Esta es una idea aproximada, pero podría usar el
pv
comando para contar el número de líneas a medida que pasan y mostrarlo en la pantalla.pv
Entre sus muchos interruptores tiene un-l
interruptor que cuenta cada línea a medida que avanza.Ejemplo
Aquí estoy usando un ciclo while para simular algunos archivos de su salida SVN.
Seguirá sobrescribiendo la línea de salida de esta manera:
fuente
Puede ejecutar su comando en segundo plano como un trabajo y redirigir su stdout (y stderr opcionalmente) a un archivo de registro:
command > logfile &
donde&
designa el trabajo (si es stderr también, diga en&>
lugar de>
).Luego puede usar la utilidad de conteo de palabras para contar la cantidad de líneas en su archivo de registro
wc -l
.Para mostrar el cambio de estado en una línea que cambia dinámicamente, podría usar algo como
while true; do echo -en '\r'; wc -l logfile; sleep 1; done
, pero no puedo obligar a bash a dibujar el\r
retorno del carro para eliminar el contenido de la línea anterior.Vea esta pregunta, es casi un duplicado: /programming/2388090/how-to-delete-and-replace-last-line-in-the-terminal-using-bash
fuente
printf/print/echo
lo sugerido por danny. :) Por supuesto, podría usarloless
, pero supongo que puede darse el lujo de decirwc -l logfile
cada vez que se impacienta. Creo que jugar conncurses
o borrar la pantalla es una exageración aquí.echo -e 'r'
comando? Debería borrar el contenido de línea previamente impreso, para que cambie dinámicamente, pero no puedo obligarlo a hacerlo :(