Esto es bastante simple de hacer en Bash simple:
#!/bin/bash # progress bar function prog() { local w=80 p=$1; shift # create a string of spaces, then change them to dots printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.}; # print those dots on a fixed-width space plus the percentage etc. printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*"; } # test loop for x in {1..100} ; do prog "$x" still working... sleep .1 # do some work here done ; echo
El primer argumento para prog
es el porcentaje, los demás se imprimen después de la barra de progreso. La variable w
en la función controla el ancho de la barra. Imprima una nueva línea después de que haya terminado, la función no imprime una.
Otra posibilidad sería usar la herramienta pv
. Está diseñado para medir el rendimiento de una canalización, pero podemos crear uno para él:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
Aquí, -pt
habilita la barra de progreso y el temporizador, -s 100
establece el tamaño de salida total, y lo que imprimamos dentro de la función cuenta para ese tamaño.
En general, puede implementar esto sobrescribiendo una línea. Utilice \r
para volver al principio de la línea sin escribir \n
en la terminal.
Escriba \n
cuando haya terminado de avanzar la línea.
Utilice echo -ne
para:
- no imprimir
\n
y
- para reconocer secuencias de escape como
\r.
Aquí «una demostración:
echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n"
EDIT: Ahora, cURL viene con una barra de progreso: --progress-bar
, ¿no es eso lo que quieres?
tomado de la respuesta t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Encontré eso con Google, primera respuesta, con los siguientes términos de búsqueda: «barra de progreso de bash»