¿Cómo se puede mostrar una barra de progreso en un script de shell?

Cuando ejecuto scripts que tardan varios segundos en completarse, me gustaría mostrar una barra de progreso. Por ejemplo al copiar un archivo muy grande o al descomprimir un archivo complejo.

¿Qué métodos recomendáis para añadir estas barras de progreso en los scripts de shell?

Estás leyendo una traducción autorizada de la pregunta How to add a progress bar to a shell script? planteada por Tom Feiner en StackOverflow.

Respuestas

#1

Lo más sencillo para mostrar la barra de progreso a mano es usar el carácter \r, que hace que el cursor vuelva a la primera posición de la línea actual. El truco consiste en ir creando una barra de progreso cada vez más completa pero no mostrar nunca el carácter \n de nueva línea más que al final.

Si utilizas el comando echo no olvides utilizarlo con las opciones -ne, que hacen que no se muestre el carácter \n y que permite reconocer las secuencias de escape necesarias para que funcione \r.

Este es un ejemplo de cómo podría escribirse la barra de progreso a mano. Si guardas estos comandos en un único archivo y lo ejecutas, verás cómo la barra de progreso se mueve:

echo -ne '#####                     (33%)\r'
sleep 1
echo -ne '#############             (66%)\r'
sleep 1
echo -ne '#######################   (100%)\r'
echo -ne '\n'

Si prefieres usar un programa externo, echa un vistazo a theiling.de/projects/bar.