Barra de progreso en bash para visualizar el time de espera

En un script bash a veces necesita que el usuario espere unos segundos para que finalice un process en segundo plano.

Usualmente uso por ejemplo:

sleep 10 

¿Cómo puedo agregar un tipo de barra de progreso al script para que el usuario sepa cuánto time esperar?

Instalé la bar commands bar pero no entiendo el manual.

 while true;do echo -n .;sleep 1;done & sleep 10 # or do something else here kill $!; trap 'kill $!' SIGTERM echo done 

esto iniciará un ciclo while infinito que hace eco de un "." cada segundo, esto se ejecuta en segundo plano.
Esto mostrará "." en el caparazón. Ejecute el command sleep o cualquier command que desee.
Cuando el command termina de ejecutarse, mata la última tarea que se ejecuta en segundo plano. Cuál es el ciclo infinito mientras

fuente: https://stackoverflow.com/a/16348366/1069083

Esto debería ser suficiente para comenzar:

 #!/bin/bash for i in {001..100}; do sleep 1 printf "\r $i" done 

El uso de la secuencia de escape devuelve la línea al inicio sin una nueva línea. Esto le permite actualizar la salida sin tener cientos de líneas de salida. Al usar esta base, puede encontrar una manera de imprimir lentamente una flecha, como =>25% ==>50% ===>75% lugar de simplemente imprimir un número. Puedes hacer esto de una manera muy básica usando la lógica if-then para imprimir un número específico de = dependiendo del tamaño del número.

Aquí hay uno que usa movimientos de cursor que reescribirán la línea para mostrar una count atrás:

 c=5 # seconds to wait REWRITE="\e[25D\e[1A\e[K" echo "Starting..." while [ $c -gt 0 ]; do c=$((c-1)) sleep 1 echo -e "${REWRITE}$c" done echo -e "${REWRITE}Done." 

En caso de que desee ver el progreso de un process de copy de file, simplemente puede usar

 pv source_file > destination_file 

o

 rsync --progress source_file destination_file 

en lugar del command cp