Crear una barra de progreso en Bash

Olorunfemi Akinlua 20 junio 2023
  1. Use el comando pv para crear una barra de progreso en Bash
  2. Use el comando diálogo para crear una barra de progreso en Bash
  3. Use la biblioteca ncurses para crear una barra de progreso en Bash
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 Akinlua avatar Olorunfemi Akinlua avatar

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