Portál AbcLinuxu, 5. května 2025 13:01

Dotaz: Bash: Jak udělat zobrazení teček

19.6.2012 17:41 Orlando
Bash: Jak udělat zobrazení teček
Přečteno: 519×
Odpovědět | Admin
Ahoj, šlo by nějaku udělat to, že pokud spustím nějaký příkaz který trvá fakt dlouho tak aby se zobrazilo třeba nějaké tečkování a kažkou sec. by se jedna tečka přidala a já bych věděl že script nevytuhl ale že pořád funguje? Díky
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 19.6.2012 18:56 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Odpovědět | | Sbalit | Link | Blokovat | Admin
Malá inspirace.

Koukni na trap a alarm.
Hello world ! Segmentation fault (core dumped)
19.6.2012 23:54 Orlando
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem našel tohle
function progr_bar {
     MAX=$1
     PERCENT=0
     FOO=">"
     BAR=""
while [ $PERCENT -lt $(($MAX+1)) ]
do
echo -ne "\r\t[ "
echo -ne "$BAR$FOO ] $((PERCENT*100/$MAX))% "
BAR="${BAR}="
let PERCENT=$PERCENT+1
sleep 0.1
done
echo -e " Done.\n"
}

progr_bar 10
ale nemůžu tam nijak napasovat tu mou funkci aby progr_bar vedel kdy je MyFCE ukončena :(
function MyFCE {
tar ..............
}
Neporadí někdo znalý? Uz se s tím morduji 2 dny :(
20.6.2012 00:20 l4m4
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Žádné místo, kam napsasovat tvou funkci, tady není. Musí běžet paralelně s tím zobrazování progressu. Viz odpověď Josefa Kufnera.
20.6.2012 23:05 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Obecně prostě příkaz, kterej chceš vykonat, je třeba spusit na pozadí:

prikaz &

zapamatovat si pid

PID=$!

a pak na něj "čekat", než se provede

while [ kill -0 $PID ] ; do
     echo -n "." 
     sleep 1
done
20.6.2012 23:18 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Druhá možnost je pustit na pozadí tečkování a po skončení příkazu tečkování ukončit.
rADOn avatar 20.6.2012 13:01 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud to tečkování není navázané na nějakou akci uvnitř (např. zpracovaný záznam) tak je taková věc na pikaču. Asi jako animovaný ikonkovátka ve wydlích který vesele animujou i když je program pod nimi mrtvej jak rathova kariéra. Pokud chceš ověřit že to něco dělá, koukni radši na účtovací informace – když to žere cykly nebo třese diskem tak to žije.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
20.6.2012 13:56 Kit
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Přinejhorším by se to dalo navázat na velikost toho výsledného taru. To by se snad ve druhém vlákně dalo udělat.
20.6.2012 16:54 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash: Jak udělat zobrazení teček
Něco takového používám, skript pct.sh kterému se zadají tři parametry: "jak spočítat aktuální hotnotu" prostřednictvím eval, "kolik je 100 procent" a "label". Ukazuje to kolik procent je hotovo (hodnota se přepisuje).

Je to už mnoho let starý skript spíchnutý horkou jehlou tak nevypadá nic moc :)

V programech třeba pro konverzi apod. pak volám:
(while true; do pct.sh "stat -Lc%s \"$ofname\"" "$(stat -Lc%s "$ifname" 2>/dev/null || echo 0)" "$ofname: "; sleep 3; done) &
pidofwatch=$!
trap "kill $pidofwatch" EXIT
Ten pct.sh pak vypadá:
cmd_current="$1"
pct_100="$2"
label="$3"

[[ "$pct_100" =~ ^[0-9][0-9]*$ ]] || exit

pct_current="$(eval $cmd_current 2>/dev/null)"

[[ "$pct_current" =~ ^[0-9][0-9]*$ ]] || exit

if [[ "$pct_current" -gt "$pct_100" ]]; then
  pct="over 100"
else
  pct="$(( 100 * $pct_current / $pct_100 ))"
fi

for((i=0;$i<${#label};i++)) {
  echo -n -e "\b"
}
for((i=0;$i<${#pct};i++)) {
  echo -n -e "\b"
}
echo -n -e "\b"

echo -n "$label$pct%"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.