Animation d'attente pour script
Par Yannick le jeudi, 7 février 2008, 20:39 - GNU/Linux - Lien permanent
L'appel à cette fonction permet d'afficher une petite animation d'attente lors du déroulement d'un script.
#!/bin/bash
attente(){
PROC=$1
while [ -d /proc/$PROC ];do
echo -en ' En cours... /\033[1G' ; sleep .07
echo -en ' En cours... -\033[1G' ; sleep .07
echo -en ' En cours... \ \033[1G' ; sleep .07
echo -en ' En cours... |\033[1G' ; sleep .07
# echo -en ' <DesEspacesIciSiBesoin> \033[1G'
done
}
ping -c4 10.10.10.10 >/dev/null 2>&1 &
attente $(pidof ping)
(Code inspiré de trop nombreuses sources diverses et des commentaires du billet)
Une petite démo pour mieux visualiser le résultat:

Après on peut imaginer d'autres variantes:

Je ne sais pas si il y a moyen d'obtenir le même résultat "graphique" de manière plus simple ? (Comprenez: il y a surement mieux.. ?)
Commentaires
Pas mal.
Tu pourrais faire un poil plus simple ceci-dit, au niveau de la gestion du placement du curseur (au lieu d'entrer des caracteres "effacement"). Regarde par ici : http://nicofo.tuxfamily.org/dotclea...
Il avait d'ailleura fait un autre article, si tu veux ajouter un peu de couleur a ton defilement : http://nicofo.tuxfamily.org/dotclea...
(PS: comme le pseudo l'indique, ce n'est pas de moi ;))
Tu peux mettre \r (carriage return) à la place de tous les ^H...
@bochecha
Merci pour ces liens interressants. Effecttivement le déplacement du curseur est bien plus efficace que des effacements successifs.
J'ai mis à jour le billet avec les \033[1G. Merci.
@Greg
Très bonne remarque également, c'etait beaucoup + simple que mes ^h.
Mais la solution de bochecha (que tu n'avais pas pu voir car il avait été bloqué par Akismet) semble être encore + simple..
Merci également.
salut, le défaut de ce genre de méthode est le "pidof" qui peut retourner plusieurs pid, ou pire retourner le mauvais si on ne lui dis d'en afficher qu'un ;)
une version graphique:
#!/bin/bash
attente(){
PROC=$(pidof -s $1)
$* &
( while [ -d /proc/$PROC ]; do echo .; done ) | zenity --progress --pulsate --auto-close
}
attente ping -c4 10.10.10.10
Yep,
voici ma contribution.
Le zenity plus haut "n'avance pas" chez moi.
Je prefere rester en CLI.
En plus on est pas sur que zenity soit installé partout :)
Ma version n'utilise quasiment que des "builtins" bash.
Pas de pidof ou autre :
Voici :
#! /usr/bin/env bash
attente(){
{ bash <<< "$@" &
} &>/dev/null
p=$!
while kill -0 "$p" &>/dev/null; do
for d in \\ \| / -; do
printf "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bAttente: ${d} "
sleep .06
done
done; echo
}
attente ping -c10 free.fr
( En plus on est sur d'attendre le bon PID )
:)
Quelqu'un saurait comment faire la même chose en python ?