Portál AbcLinuxu, 16. května 2025 02:54

Dotaz: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste

19.10.2012 13:06 Martina
Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
Přečteno: 239×
Odpovědět | Admin
Dobry den. Pokud spustim tento kousek kodu, terminal se ani nehne, prepisuje se vse na jednom radku. Super!
for (( i=0; i<10; i++ ))
do
 echo -ne "$i\r"
  sleep 0.100
done
Jde neco takoveho udelat i pokud vypisuji treba nejakou funkci s vice radky nebo nejaky vetsi blok? Ted pouzivam v nejakem cyklu na zacatku clear a tak kdyz posunu obrazovku posuvnikem v terminalu, tak je to tam nescetne krat vypsano, chtela bych aby se to chovalo jako u toho prikladu a vysledek byl v terminalu jen jeden ktery by se prepisoval. Dekuji M.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.10.2012 13:22 l4m4
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odpověď je ano, jde, ale čistě v shellu to je pěkná zhulenost. Na práci s terminálem ,celoobrazovkovým` způsobem se normálně používají knihovny, typicky ncurses. Nicméně... Vypsat bleble o řádek výše:
up=$(tput cuu1)
echo ${up}bleble
Pro detaily viz tput(1) a terminfo(5).
19.10.2012 13:42 Martina
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
Dekuji a mohla bych poprosit o nejakou nazornou ukazku treba pri pouziti tohoto scriptu?
for (( i=0; i<10; i++ ))
do
 echo "$i"
 echo "$i"
 echo "$i"
 echo "$i"
 echo "$i"
 sleep 0.100
done
Moc děkuji. M.
19.10.2012 13:46 l4m4
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
To je opravdu takový problém namísto echo $up napsat echo $up$up$up$up$up, nebo kolikrát to tam má být?
19.10.2012 13:58 Martina
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
To je opravdu takový problém namísto echo $up napsat echo $up$up$up$up$up, nebo kolikrát to tam má být?
Problem to neni, ale nic to nevypisuje :-(
up=$(tput cuu1)

for (( i=0; i<10; i++ ))
do
echo $up$up$up$up$up
     sleep 0.100
done
19.10.2012 14:02 l4m4
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
Nic to nevypisuje. Posouvá to pokaždé kursor pětkrát nahoru, což je to, co potřebuješ. Vypsat si už můžeš, co chceš. Počet vypsaných řádků samozřejmě musí souhlasit s početem posuvů, jinak se budou v dole hromadit horníci.
19.10.2012 14:25 Martina
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
Asi si nerozumime co potrebuji, ted mi to vypisuje 5x promenou $i, ale v jednom radku, potrebuji to vypsat jako jeden celek ale podsebou a na jednom miste, to je o co se celou dobu snazim :-(
up=$(tput cuu1)

for (( i=0; i<10; i++ ))
do
echo $up$i$up$i$up$i$up$i$up$i
     sleep 0.100
done
exit
Josef Kufner avatar 19.10.2012 14:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak spustit cyklus v shellu aby byl vypis jen na jednom miste
up=$(tput cuu1)

# trocha mista, aby se nesmazal predchozi vypis
# (stejne radku jako ve vypisu -- je jich 6)
echo -e "\n\n\n\n\n"

for (( i=0; i<10; i++ ))
do
  # posun nahoru o 6 radku
  #      1. 2. 3. 4. 5. 6.
  echo "$up$up$up$up$up$up"

  # to co chces vypsat
  echo "1. radek: $i"
  echo "2. radek: $i"
  echo "3. radek: $i"
  echo "4. radek: $i"
  echo "5. radek: $i"   # tady ti kurzor odskoci na 6. radek

  sleep 0.100
done
Hello world ! Segmentation fault (core dumped)

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.