Estoy usando svn exportcomo 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
--quiety 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 ...printftermina con a\r. Y qué pasa si lo hacesecho -ne "$I\r"oprint -n "$I\r". :)printfSin embargo, solía , porque el valor predeterminado es no imprimir una nueva línea al final, por lo que\rsolo retrocede al principio. Desafortunadamente, no todas las implementaciones de eco admiten el argumento-eo-n.readaread -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
pvcomando para contar el número de líneas a medida que pasan y mostrarlo en la pantalla.pvEntre sus muchos interruptores tiene un-linterruptor 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\rretorno 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/echolo sugerido por danny. :) Por supuesto, podría usarloless, pero supongo que puede darse el lujo de decirwc -l logfilecada vez que se impacienta. Creo que jugar conncurseso 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 :(