Kommentarer
- Du kan bruge eller tilpasse fra denne github.com/noqqe/bash-progress-bar hvis den kan hjælpe dig
Svar
Dette er ret simpelt at gøre i bare 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 argument til prog
er procentdelen, alle andre udskrives efter statuslinjen. Variablen w
i funktionen styrer bjælkens bredde. Udskriv en ny linje, når du er færdig, funktionen udskriver ikke en.
En anden mulighed ville være at bruge værktøjet pv
. Det er beregnet til måling af en pipelines gennemstrømning, men vi kan oprette en til 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 statuslinjen og timeren, -s 100
indstiller den samlede outputstørrelse, og hvad vi udskriver inde i funktionen tæller med den størrelse.
Svar
Generelt kan du implementere dette ved at overskrive en linje. Brug \r
for at gå tilbage til begyndelsen af linjen uden at skrive \n
til terminalen.
Skriv \n
, når du er færdig med at fremme linjen.
Brug echo -ne
til:
- ikke udskriv
\n
og - for at genkende 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: Nu kommer cURL med en statuslinje: --progress-bar
, er det ikke det, du vil have?
taget fra svar t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Fundet, at med Google, første svar, med følgende søgeudtryk: “bash statuslinje”