Commentaires
- Vous pouvez utiliser ou adapter à partir de celui-ci github.com/noqqe/bash-progress-bar sil peut vous aider
Réponse
Ceci est assez simple à faire en simple Bash:
#!/bin/bash # progress bar function prog() { local w=80 p=$1; shift # create a string of spaces, then change them to dots printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.}; # print those dots on a fixed-width space plus the percentage etc. printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*"; } # test loop for x in {1..100} ; do prog "$x" still working... sleep .1 # do some work here done ; echo
Le premier argument de prog
est le pourcentage, tous les autres sont imprimés après la barre de progression. La variable w
de la fonction contrôle la largeur de la barre. Imprimez une nouvelle ligne une fois que vous avez terminé, la fonction nen affiche pas une.
Une autre possibilité serait dutiliser loutil pv
. Il est destiné à mesurer le débit dun pipeline, mais nous pouvons en créer un:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
Ici, -pt
active la barre de progression et le minuteur, -s 100
définit la taille de sortie totale, et tout ce que nous imprimons dans la fonction compte dans cette taille.
Réponse
En général, vous pouvez implémenter cela en écrasant une ligne. Utilisez \r
pour revenir au début de la ligne sans écrire \n
dans le terminal.
Écrivez \n
lorsque vous avez terminé davancer la ligne.
Utilisez echo -ne
pour:
- ne pas imprimer
\n
et - pour reconnaître les séquences déchappement telles que
\r.
Voici « une démo:
echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n"
EDIT: Maintenant, cURL est livré avec une barre de progression: --progress-bar
, nest-ce pas ce que vous voulez?
tiré de la réponse t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Jai trouvé cela avec Google, première réponse, avec les termes de recherche suivants: « barre de progression bash »