Linux + come creare una semplice barra di avanzamento nel ruolo bash [duplicate]

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”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *