Portál AbcLinuxu, 9. května 2025 22:46

Dotaz: Bash, preruseni cyklu

18.1.2009 23:45 Reaktor
Bash, preruseni cyklu
Přečteno: 430×
Odpovědět | Admin

Dobry den, mam takovyho cyklus:

 

for ((i=0;i<=10000;i=i+1)); do 
  echo $i; 
done

Cyklus pracuje pomerne dlouho a ja bych rad vedel, zda se program nesekl. Proto mam takovouto predstavu: V prubehu cyklu zmacknu nejakou klavesu a skript mi vypise aktualni hodnotu $i a bude dale pokracovat. Je toto nejakym zpusobem realizovatelne?

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

Odpovědi

18.1.2009 23:58 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebolo by jednoduchšie každých niekoľko prechodov zobraziť napr. bodku či aktuálnu hodnotu $i (kedže neviem o tom, že by neexistoval jednoduchý spôsob ako zistiť, či bol stlačený kláves iný ako "Enter")?
b42 avatar 19.1.2009 00:08 b42 | skóre: 12 | Ostrava/Brno
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Pokud by bylo přijatelné řešení místo stisku tlačítka poslat procesu signál, šlo by to nějak takhle:

#!/bin/bash

vypis () {
        echo $i;
}

trap vypis SIGUSR1
echo "PID: $$"

for ((i=0;i<=10000000;i=i+1)); do
        : #nop
done

a pak procesu poslat ten signál: kill -SIGUSR1 pid_procesu. Místo SIGUSR1 by asi šlo použít některý ze signálů, který pošle procesu terminál při stisknutí Ctrl+něco, nevím ale, jak moc dobrý je to nápad. (Další info: help trap, man 7 signal)

19.1.2009 00:36 Reaktor
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Chtel jsem trapovat signal, ktery posle CTRL+D, ale zaboha nemuzu zjistit, jak se tento signal jmenuje. Muzete mi prosim poradit?

19.1.2009 01:07 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
CTRL+D neposiela ziadny signal. Je to znamenie, ze je EOF.
If you hold a Unix shell up to your ear, you can you hear the C.
Fuky avatar 19.1.2009 01:22 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
Použij odchycení Ctrl+C a chceš-li mít více možností, tak následně použij read pro další větvení tj. např. ukončení programu, podrobnější výpis atp.
19.1.2009 01:30 Reaktor
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu

A je nejaky zpusob jak sriptu prikazat, aby mi to vypsal po stisku CTRL+D nebo je to nerealne?

Fuky avatar 19.1.2009 01:45 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
Pokud na tom trváš, tak to samozřejmě lze. ;-) Můžeš toho docílit např. tím, že vlastní skript poběží na pozadí a na popředí bude čekat read na stisknutí Ctrl+D a poté odešle signál, který dokáže odchytit trap skriptu na pozadí.
Fuky avatar 19.1.2009 01:39 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bash, preruseni cyklu
Odpovědět | | Sbalit | Link | Blokovat | Admin

A nebude lepší když tě program na zásek upozorní sám? Tj. definuješ maximální dobu, kterou může trvat jedna iterace a po jejím překročení na to budeš upozorněn.

Příklad nalezneš např. v BASH - VI: obesenec-1.1.tgz, soustřeď se na fce stopky_start, stopky_stop... ;-)

-- RÁMO: psí tábor , ETriatlon: Výuka plavání

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.