Linux + hogyan hozhatunk létre egyszerű haladássávot a bash-ban [duplicate]

A kérdésre már itt vannak válaszok :

Megjegyzések

válasz

Ezt meglehetősen egyszerű megtenni pusztán Bash-ban:

#!/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 

A prog a százalékos érték, minden más az előrehaladási sáv után nyomtatódik. A függvény w változója a sáv szélességét szabályozza. Ha elkészült, nyomtasson új sort, a funkció nem nyomtatja ki.


Egy másik lehetőség az pv eszköz használata. Ez egy csővezeték áteresztőképességének mérésére szolgál, de létrehozhatunk hozzá:

for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null 

Itt, -pt engedélyezi a haladási sávot és az időzítőt, -s 100 beállítja a teljes kimeneti méretet, és bármi, amit a függvényen belül nyomtatunk, beleszámít az adott méretbe.

Válasz

Általában ezt egy sor felülírásával valósíthatja meg. A \r segítségével visszatérhet a a sort anélkül, hogy \n -t írna a terminálra.

Írja meg a \n parancsot, amikor megtette a sor előrehaladását.

A echo -ne használatával:

  • ne nyomtassa ki \n és
  • a menekülési szekvenciák felismerésére, mint például: \r.

Itt “bemutató:

echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n" 

SZERKESZTÉS: Most a cURL egy folyamatjelzővel érkezik: --progress-bar, nem ezt akarod?

a t válaszból vettük át o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script

Megállapította, hogy a Google-nél először válaszoljon a következő keresési kifejezésekkel: “bash progress bar”

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük