Sziasztok
Van egy bash scriptem, amiben egy végtelen ciklus fut.
while true; do
#ciklusmag
done
jelleggel.
Elindul, teszi a dolgát, de leállítani ugye nem tudom, csak a processz leállításával. ( Ctrl-C )
Azt szeretném megtanítani neki, hogy figyelje a billentyű-leütéseket, és ha kap egy Any key -t, /:)/ akkor szakítsa meg a ciklust, és folytassa a done után.
read -n 1 -gyel próbálkoztam, eleddig eredméytelenül.
Hálás lennék valami jó ötletért :)
Köszi, üdv
tsb
- 1983 megtekintés
Hozzászólások
break
vagy az a kérdés, hogy a read-nek ne kelljen Entert nyomni?
- A hozzászóláshoz be kell jelentkezni
break az oké, feltételt nem tudok neki adni.
Az bekavarhat, hogy a ciklusmagban van egy sleep ?
Lehet, hogy amíg alszik, addig nem tud olvasni :)
- A hozzászóláshoz be kell jelentkezni
A read-en blokkolni fog, ha csak nem adsz meg timeoutot neki (esetleg összevonhatod a sleeppel)
Másik ötlet, hogy háttérben indítod a ciklust és egy változót figyel kilépési feltételként.
Readdel olvasod a billentyűket és állítod a változót.
Ezt szerintem a bashban fájdalmas lehet megírni :)
- A hozzászóláshoz be kell jelentkezni
Kicsit googleztam és ezt találtam:
#!/bin/bash
escape=$'\x1b'
echo "Looping..."
while true
do
read -s -n1 -t1 key
echo "test";
if [ "$key" == "$escape" ]
then
break
else
key=""
fi
done
echo "Continue..."
- A hozzászóláshoz be kell jelentkezni
Sziasztok
Ezt kipróbáltam, és működik, vagy legalábbis nekem épp jó lesz ez a megoldás.
Vagyis amit VB is írt, hogy sleep helyett a read-nek adunk -t -vel késleltetést.
Köszönöm mindkettőtöknek!
- A hozzászóláshoz be kell jelentkezni
Na ezzel csak az a baj, h a -t nem fogad el csak egesz masodpercet, amibol ugye az 1 a legkisebb. Nekem meg a tizede is eleg volna.
De nem cifrazom mostmar, jo az igy is, legfeljebb nem lesz olyan latvanyos, tobbet kell varni az eredmeny valtozasara.
tsb
- A hozzászóláshoz be kell jelentkezni