Linux + hvordan lage enkel fremdriftslinje i bash [duplikat]

Dette spørsmålet har allerede svar her :

Kommentarer

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»

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *