Crear una barra de progreso en Bash
-
Use el comando
pv
para crear una barra de progreso en Bash -
Use el comando
diálogo
para crear una barra de progreso en Bash -
Use la biblioteca
ncurses
para crear una barra de progreso en Bash
Una barra de progreso es un indicador visual que muestra el progreso de una tarea, como un script o comando de ejecución prolongada. Puede ser útil para proporcionar comentarios al usuario sobre el estado de la tarea y también puede ayudar a estimar el tiempo restante hasta que se complete la tarea.
Este artículo explorará varios enfoques para agregar una barra de progreso a un script de shell en Bash, el shell predeterminado para Linux y macOS.
Use el comando pv
para crear una barra de progreso en Bash
Una de las formas más sencillas de agregar una barra de progreso a un script de shell es usar el comando pv
, que significa visor de tuberías. Este comando permite monitorear el progreso de los datos pasados a través de una tubería, que se puede usar para mostrar una barra de progreso en la terminal.
Por ejemplo, para agregar una barra de progreso a una secuencia de comandos que copia un archivo grande de una ubicación a otra, puede usar el siguiente comando:
cat file.txt | pv -s $(stat -c%s file.txt) > /destination/file.txt
Este comando usa cat
para leer el contenido del archivo file.txt
y canaliza la salida al comando pv
. El comando pv
utiliza la opción -s
para especificar el tamaño de los datos de entrada en bytes y calcula el progreso en función de este valor.
La salida del comando pv
se redirige al archivo de destino.
Cuando se ejecuta el script, el comando pv
mostrará una barra de progreso en la terminal, mostrando el porcentaje del archivo copiado y el tiempo restante estimado hasta que se complete la tarea. La barra de progreso se actualizará dinámicamente a medida que se transfieran los datos y desaparecerá cuando finalice la tarea.
Use el comando diálogo
para crear una barra de progreso en Bash
Otro enfoque para agregar una barra de progreso a un script de shell es usar el comando diálogo
, una utilidad para crear interfaces fáciles de usar en la terminal. El comando diálogo
puede mostrar varios widgets, incluida una barra de progreso, y puede controlarse a través del script para mostrar el progreso actual de la tarea.
Para usar el comando diálogo
para agregar una barra de progreso a un script de shell, puede usar la opción --gauge
para crear un nuevo widget de barra de progreso. La opción --gauge
toma varios argumentos, incluido el título del widget, la altura y el ancho del widget y el valor inicial de la barra de progreso.
Aquí hay un ejemplo de cómo usar la opción --gauge
para crear una barra de progreso con el título Copiando archivo
y un valor inicial de 0:
dialog --gauge "Copying file" 10 70 0
Este comando creará un widget de barra de progreso con una altura de 10 líneas y un ancho de 70 caracteres, y mostrará el título “Copiando archivo” en la parte superior del widget. La barra de progreso estará inicialmente vacía, con un valor de 0.
Para actualizar el progreso de la tarea y el valor de la barra de progreso, puede usar la opción --title
para configurar el título del widget y la opción --gauge-data
para configurar el valor actual de la barra de progreso. Por ejemplo, para actualizar la barra de progreso para mostrar un 50 % completo, puede usar el siguiente comando:
dialog --title "Copying file" --gauge-data 50
Este comando actualizará el título del widget a Copiando archivo
y el valor de la barra de progreso a 50. La barra de progreso se volverá a dibujar con los nuevos valores y el usuario verá el progreso actualizado de la tarea en la terminal.
Para usar el comando diálogo
en un script de shell, puede usar la opción --and-widget
para especificar una lista de comandos de widget que deben ejecutarse en secuencia. Esto le permite crear y actualizar la barra de progreso en el script y garantizará que los widgets se dibujen y actualicen en el orden correcto.
Aquí hay un ejemplo de un script de shell que usa el comando diálogo
para crear y actualizar una barra de progreso:
#!/bin/bash
# Create the progress bar widget
dialog --gauge "Copying file" 10 70 0
Use la biblioteca ncurses
para crear una barra de progreso en Bash
Otro enfoque para agregar una barra de progreso a un script de shell es usar la biblioteca ncurses
, una biblioteca de programación para crear interfaces fáciles de usar en la terminal. La biblioteca ncurses
proporciona muchas funciones y widgets para crear menús interactivos, formularios y otras interfaces gráficas de usuario, y se puede usar para crear una barra de progreso personalizada en un script de shell.
Para usar la biblioteca ncurses
para agregar una barra de progreso a un script de shell, puede usar la función initscr
para inicializar la pantalla y la función newwin
para crear una nueva ventana para la barra de progreso. La función newwin
toma varios argumentos, incluyendo la altura y el ancho de la ventana y la posición inicial de la ventana en la pantalla.
Aquí hay un ejemplo de cómo usar la función newwin
para crear una ventana de barra de progreso con una altura de 10 líneas y un ancho de 70 caracteres en la posición (5,5) en la pantalla:
#!/bin/bash
# Initialize the screen
initscr
# Create the progress bar window
win=`newwin 10 70 5 5`
Este código inicializará la pantalla y creará una nueva ventana para la barra de progreso. La variable ganar
hará referencia a la ventana, que se puede usar para acceder y actualizar la barra de progreso en el script.
Para dibujar el estado inicial de la barra de progreso, puede usar la función box
para dibujar un cuadro alrededor de la ventana y la función mvwaddstr
para escribir el título de la barra de progreso y el valor inicial de 0% dentro del cuadro.
Aquí hay un ejemplo de cómo usar estas funciones para dibujar el estado inicial de la barra de progreso:
# Draw the box around the window
box $win 0 0
# Write the title and initial value of the progress bar
mvwaddstr $win 1 1 "Copying file"
mvwaddstr $win 1 30 "0%"
Para actualizar el progreso de la tarea y el valor de la barra de progreso, puede usar la función mvwaddstr
nuevamente para escribir el nuevo valor de la barra de progreso dentro del cuadro. Por ejemplo, para actualizar la barra de progreso para mostrar un 50 % completo, puede usar el siguiente código:
# Update the value of the progress bar
mvwaddstr $win 1 30 "50%"
Este código sobrescribirá el valor existente de la barra de progreso con el nuevo valor del 50 %. La barra de progreso se volverá a dibujar con el nuevo valor y el usuario verá el progreso actualizado de la tarea en la terminal.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn