Linux + jak vytvořit jednoduchý indikátor průběhu v bash [duplikát]

Tato otázka již má odpovědi zde :

Komentáře

odpověď

To je poměrně jednoduché v prostém 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 

První argument prog je procento, ostatní se vytisknou za ukazatelem průběhu. Proměnná w ve funkci řídí šířku pruhu. Po dokončení vytiskněte nový řádek, funkce jej nevytiskne.


Další možností by bylo použití nástroje pv. Je to určeno pro měření propustnosti kanálu, ale můžeme pro něj vytvořit jeden:

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

Zde, -pt povoluje indikátor průběhu a časovač, -s 100 nastavuje celkovou velikost výstupu a vše, co ve funkci vytiskneme, se proti této velikosti započítá.

Odpověď

Obecně to můžete implementovat přepsáním řádku. Pomocí \r se vraťte na začátek řádek bez zápisu \n do terminálu.

Když jste hotovi, posuňte řádek \n.

Pomocí echo -ne můžete:

  • nevytisknout \n a
  • rozpoznat únikové sekvence jako \r.

Zde je ukázka:

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

EDIT: Nyní, cURL přichází s indikátorem průběhu: --progress-bar, není to to, co chcete?

převzato z odpovědi t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script

Zjistili jsme, že u Google nejprve odpovězte pomocí následujících hledaných výrazů: „ukazatel průběhu bash“

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *