En estos días he estado realizando un script interactivo en BASH y decidí darle una buena presentación gráfica en el terminal usando dialog como generador de interfases , una de las dudas que me surgió es como colocar una barra de progreso en uno de los pasos que se tarda un poco de tiempo a manera de tener una presentación un poco más agradable al usuario.
Desgraciadamente la documentación de dialog no explora muy bien esta parte, así que me dedique a investigar y esto fue lo que obtuve:
Antes de continuar debes tener dialog instalado:
yum install dialog
Y ahora mediante el siguiente comando podemos probar más o menos el uso de la barra de progreso
find /etc/ -name *.conf 2>&1 | awk ‘{ print (Total+=1)/3.7,»=>»,$0}’ | dialog –gauge «Espere un momento…» 7 70
En donde el valor 3.7 es un factor que tiene que ser calculado mediante ensayo y error dependiendo del tiempo que se considere que va a tomar el comando find en ejecutarse, en este caso y para mi computador el valor 3.7 fúe el adecuado, como se ve no es un método muy adecuado para tener una barra de progreso debido a que no sabemos en realidad cuanto puede tardar nuestra acción en el computador de cada quien.
Otra caso de uso, puede ser el del siguiente script, el cual va a ir sumando 1% por cada segundo en la barra de progreso:
#!/bin/bash
i=0
while [ $i -le 100 ]
do
echo $i | dialog –gauge «Progreso…» 7 30
i=`expr $i + 1`
sleep 1
done
Usando modificaciones al script pasado puede darse una mejor manera de usar la barra de progreso en dialog, ya que por ejemplo y solo de manera academica ( no creo que sea un caso muy útil de uso ), la variable $i podría ser el porcentaje de memoria RAM o CPU usado ( previamente calculado con otra operación ).
Otra manera que consegui de hacer una barra de progreso, pero sin usar dialog, más al estilo de la que se muestra cuando se usa el comando wget, se puede conseguir en:
http://www.theiling.de/projects/bar.html
La barra de progreso se ve más o menos así:
Para conseguir más información de su uso o descargar el código, visita el enlace anterior.
Yo uso pv (en Ubuntu se encuentra en los repositorios), por ejemplo para extraer un archivo comprimido:
$ pv archivo.tgz | tar xzf –
Muestra algo como:
1.16MB 0:00:20 [6.06MB/s] [==================> ] 55% ETA 0:00:37
Te indica la tasa de transferencia del pipe, el tiempo que lleva y un estimado del tiempo que tomará en terminar, además del progreso en porcentaje y con la barrita.
Excelente tip José, muchas gracias, voy a estar probando pv