¿Cómo puedo crear una barra de progreso con bash?
Este es mi guión:
#!/bin/bash
pass='number1 number12 number13 number14 number15 number16'
chk='number14'
for i in $pass ; do
if [ "$i" == "$chk" ]; then
echo ' Found ^_^'
else
echo 'loading 50%'
fi
done
Quiero reemplazar echo 'loading 50%'con cualquier cosa para crear una barra de progreso.
command-line
bash
Black Hawk
fuente
fuente

etapodría hacer lo que quieras.Respuestas:
whiptailviene preinstalado en Ubuntu y muchas otras distribuciones, y mostrará elementos de progreso en pantalla completa (pero aún basados en terminales).dialoges un superconjunto dewhiptail, por lo que este ejemplo funcionará igualmente bien con ambos. Proporciona elementos de interfaz de usuario más avanzados, por lo que puede ser útil si está buscando interacción del usuario, como selectores de archivos y formularios, pero tiene la desventaja de no venir preinstalado en muchos sistemas.Tenga en cuenta que la salida del script se interpreta como un porcentaje, por lo que puede que tenga que ajustar su salida en consecuencia.
Whiptail y Dialog también le permiten modificar el texto en tiempo de ejecución a través de una sintaxis bastante críptica:
pvmuestra el progreso de un archivo o secuencia que se canaliza a través de él. Sin embargo, no puede usarse (¿fácilmente?) Para mostrar el progreso de una operación personalizada, como un bucle. Está diseñado específicamente para transmisiones.Algunos ejemplos del mundo real son
pvútiles:No conozco ningún comando que proporcione barras de progreso de una línea en el estilo de
pvowget, pero hay muchos scripts simples de Bash / Perl / sed que agregarán esa funcionalidad, como otros han compartido aquí.fuente
pvusted, puede hacer que busque la salida del bucle o crear alguna salida falsa, por ejemplo, unechoen cada iteración, canalizarlopvy darle el recuento de iteración-s. Si no se desea, recuerde redirigir el stdout del bucle a/dev/null. Aquí hay un ejemplo que muestra este enfoque .Puede usar
zenitypara crear ventanas de diálogo GTK simples. Una de las opciones disponibles es un diálogo de barra de progreso.Usted crea dicha ventana usando
zenity --progress. Para que sea útil, debe especificar más información agregando algunas de las opciones a continuación (extracto deman zenity):Hay dos modos:
pulsante : la barra de progreso está pulsando, solo indica que algo se está ejecutando, pero no dice nada sobre el progreso. Para ello, configura la
--pulsatingopción.manual : debe canalizar el porcentaje de progreso actual a la
zenityentrada estándar del comando para actualizar la barra de progreso.Un ejemplo de esto podría verse así a continuación. Tenga en cuenta que los comandos anteriores se agrupan en una subshell para que toda la salida se redirija al
zenitycuadro de diálogo y no solo la del último comando:fuente
[ ###########--------------] 52%Este código lo hará, y no requiere nada (aparte de bash, por supuesto). Imprime
#letreros, como usted preguntó en su comentario:Sin embargo, si tiene mucho que verificar, esto solo llenará su pantalla con
#signos. Para solucionar ese problema, intente este código:Cambie el 5 en la primera línea (
lenProgressBar=5) a la longitud que desea que tenga su barra de progreso. Tardará más en imprimir un#letrero con barras de progreso de menor longitud que con barras de mayor longitud, pero no permita que la longitud de la barra de progreso exceda el tamaño de su pantalla; no funcionará bien si lo haces. (No le permitirá usar una barra de progreso superior a la cantidad de elementos que está revisando o inferior a 1)fuente
tput colspara detectar el ancho de la ventana de terminal y escalar la barra de progreso en consecuencia.Aquí hay otro enfoque que usa códigos de escape ansi:
fuente