Această întrebare are deja răspunsuri aici :
Comentarii
Răspundeți
Acest lucru este destul de simplu de realizat doar în Bash simplu:
#!/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
Primul argument pentru prog
este procentajul, orice altele sunt tipărite după bara de progres. Variabila w
din funcție controlează lățimea barei. Imprimați o linie nouă după ce ați terminat, funcția nu imprimă una.
O altă posibilitate ar fi utilizarea instrumentului pv
. Este menit să măsoare debitul unei conducte, dar putem crea unul pentru aceasta:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
Aici, -pt
activează bara de progres și temporizatorul, -s 100
setează dimensiunea totală de ieșire și orice imprimăm în interiorul funcției contează pentru acea dimensiune.
Răspuns
În general, puteți implementa acest lucru suprascriind o linie. Utilizați \r
pentru a reveni la începutul linia fără să scrie \n
la terminal.
Scrie \n
când ai terminat pentru a avansa linia.
Utilizați echo -ne
pentru:
- să nu imprimați
\n
și
- pentru a recunoaște secvențe de evadare precum
\r.
Aici „o demonstrație:
echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n"
EDIT: Acum, cURL vine cu o bară de progres: --progress-bar
, nu asta vrei?
preluat din răspunsul t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Am constatat că, cu Google, primul răspuns, cu următorii termeni de căutare: „bara de progres bash”