Linux + hvordan man opretter enkel statuslinje i bash [duplikat]

Dette spørgsmål har allerede svar her :

Kommentarer

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”

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *