Comment imprimer sur la même ligne, en remplaçant la ligne précédente?
Je vois parfois des commandes dans le terminal de l'impression des résultats sur la sortie standard, mais dans la même ligne. Par exemple wget imprime une flèche comme ci-dessous:
0[=> ]100%
0[ => ]100%
0[ => ]100%
0[ => ]100%
0[ =>]100%
mais il est imprimé sur la même ligne donc il semble que la flèche est en mouvement. Comment puis-je obtenir la même chose dans mes programmes à l'aide de bash ou sh? Ai-je besoin d'utiliser d'autres outils?
Mise à JOUR:
Je sais que j'ai mentionné wget, qui vient par défaut dans linux, GNU basé sur unix ... Est-il une approche générale qui fonctionne sur les systèmes Bsd trop? (comme OSX) -> OK, Si j'utilise bash au lieu de sh, puis il travaille 🙂
OriginalL'auteur nacho4d | 2013-08-02
Vous devez vous connecter pour publier un commentaire.
Utiliser le caractère spécial
\r
. Il revient au début de la ligne, sans passer à la suivante.for i in {1..10} ; do echo -n "0[ "; for ((j=0; j<i; j++)) ; do echo -n ' '; done; echo -n '=>' ; for ((j=i;j<=10;j++)) ; do echo -n ' '; done; echo -n $'] 100% \r'; sleep 1; done
OriginalL'auteur choroba
Vous pouvez utiliser
\r
à cet effet:Par exemple cela permet de garder la mise à jour de l'heure actuelle dans la même ligne:
echo
de commande, mais il fonctionne à nice enbash
Vrai, pour des raisons de portabilité
printf
doit être préférée à l'echo
avec option d'arguments.OriginalL'auteur fedorqui
Vous pouvez également utiliser
ANSI/VT100 terminal escape sequences
pour atteindre cet objectif.Voici un court exemple. Bien sûr, vous pouvez combiner les
printf
déclarations pour.Avec les séquences d'échappement vous avez le plus de contrôle sur l'écran de votre terminal.
Vous pouvez trouver une vue d'ensemble des séquences possibles à [Un].
[1] http://ascii-table.com/ansi-escape-sequences-vt-100.php
OriginalL'auteur user1146332