Afficher un compteur sur la ligne de commande

Je me suis toujours demandé comment étaient fait les compteurs sur la ligne de commande. Par exemple, quand vous utilisez un wget, un scp, vous avez une barre de progression.

Moi, tout ingénu, je pensais que je ne pouvais écrire qu'une fois sur une position sur l'écran, qu'une fois un caractère écrit, je passais au suivant ou changeais de ligne. C'est faux ! Il est très facile de réécrire là ou on a déjà écrit. La preuve avec ce petit script qui affiche un timer...

#!/bin/bash
# Number of second to sleep
typeset -i sleep=60
printf "Sleeping %0.2d sec... " $sleep
# Cursor is visible and located after "..."
# Store current cursor position
tput sc
typeset -i c=$sleep
while [[ $c -gt 0 ]]
do
	# Sleep 1 second during $sleep iterations
	sleep 1
	c=$c-1
	# Moves the cursor 9th times to the left of its current location
	tput cub 9
	# Erase current number of seconds left by printing to "backspace"
	printf "bb"
	# Print the new value
	printf %0.2d $c
	# Restore cursor location, stored by former "tput sc"
	tput rc
done

Il est a noter que si j’utilise le store/reset cursor, c’est pour éviter qu’il soit positionné juste après le nombre (c’est en effet étrange d’avoir le curseur en plein milieu de la phrase), mais à la fin de la ligne.

Vous remarquerez également que cela ne marche qui si on a un nombre à deux chiffres. A vous d’adapter si vous souhaitez autre chose !!1

Ceci n’est qu’un exemple, comme d’hab, le man pour plus d'infos.

Damien Gustave

Read more posts by this author.