Kommentarer
- Du kan bruke eller tilpasse fra denne github.com/noqqe/bash-progress-bar hvis den kan hjelpe deg
Svar
Dette er ganske enkelt å gjøre i bare vanlig 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
Det første argumentet til prog
er prosentandelen, alle andre skrives ut etter fremdriftslinjen. Variabelen w
i funksjonen styrer stolpens bredde. Skriv ut en ny linje etter at du er ferdig, funksjonen skriver ikke ut en.
En annen mulighet vil være å bruke verktøyet pv
. Det er ment for å måle gjennomstrømningen til en rørledning, men vi kan lage en for den:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
Her, -pt
aktiverer fremdriftslinjen og tidtakeren, -s 100
angir den totale utskriftsstørrelsen, og alt vi skriver ut i funksjonen teller mot den størrelsen.
Svar
Generelt kan du implementere dette ved å overskrive en linje. Bruk \r
for å gå tilbake til begynnelsen av linjen uten å skrive \n
til terminalen.
Skriv \n
når du er ferdig for å fremme linjen.
Bruk echo -ne
til:
- ikke skriv ut
\n
og - for å gjenkjenne escape-sekvenser som
\r.
Her «er en demo:
echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n"
EDIT: Nå kommer cURL med en fremdriftslinje: --progress-bar
, er det ikke det du vil?
hentet fra svar t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Fant at med Google, første svar, med følgende søkeord: «bash fremdriftslinje»