Commenti
- Puoi usare o adattarti da questo github.com/noqqe/bash-progress-bar se può aiutarti
Rispondi
Questo è piuttosto semplice da fare in un semplice 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
Il primo argomento di prog
è la percentuale, tutte le altre vengono stampate dopo la barra di avanzamento. La variabile w
nella funzione controlla la larghezza della barra. Stampa una nuova riga dopo aver terminato, la funzione non ne stampa una.
Unaltra possibilità sarebbe usare lo strumento pv
. È pensato per misurare il throughput di una pipeline, ma possiamo crearne uno per esso:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
Qui, -pt
abilita la barra di avanzamento e il timer, -s 100
imposta la dimensione totale delloutput e qualunque cosa stampiamo allinterno della funzione conta rispetto a quella dimensione.
Risposta
In generale, puoi implementarla sovrascrivendo una riga. Utilizza \r
per tornare allinizio di la riga senza scrivere \n
sul terminale.
Scrivi \n
quando hai finito di far avanzare la riga.
Utilizza echo -ne
per:
- non stampare
\n
e - per riconoscere sequenze di escape come
\r.
Ecco “una demo:
echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n"
EDIT: ora, cURL viene fornito con una barra di avanzamento: --progress-bar
, non è quello che vuoi?
tratto dalla risposta t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Trovato con Google, prima risposta, con i seguenti termini di ricerca: “bash barra di avanzamento”