Kommentarer
- Du kan använda eller anpassa från den här github.com/noqqe/bash-progress-bar om det kan hjälpa dig
Svar
Detta är ganska enkelt att göra i helt enkelt 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örsta argumentet till prog
är procenten, alla andra skrivs ut efter förloppsindikatorn. Variabeln w
i funktionen styr fältets bredd. Skriv ut en ny rad när du är klar, funktionen skriver inte ut en.
En annan möjlighet skulle vara att använda verktyget pv
. Den är avsedd för mätning av en pipelines genomströmning, men vi kan skapa en för den:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
Här, -pt
aktiverar förloppsindikatorn och timern, -s 100
ställer in den totala utmatningsstorleken, och vad vi än skriver ut i funktionen räknas den storleken. h2> Svar
Generellt kan du implementera detta genom att skriva över en rad. Använd \r
för att gå tillbaka till början av raden utan att skriva \n
till terminalen.
Skriv \n
när du är klar för att gå vidare till raden.
Använd echo -ne
till:
- skriv inte ut
\n
och - för att känna igen escape-sekvenser som
\r.
Här ”är 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 ett framstegsfält: --progress-bar
, är det inte vad du vill?
hämtat från svar t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
Hittade att med Google, första svaret, med följande sökord: ”bash progress bar”