İle ddbir dosyadan tek bir baytı güvenilir bir şekilde okuyabilirsiniz. İle bir terminal okuma ve bir saniyenin onda biri olarak bir çıkış nitelendirmek için sttybir mindizi bayt ayarlayabilirsiniz time. Bu ikisini birleştirin ve sleepbence tamamen olmadan yapabilirsiniz ve sadece terminalin okuma zaman aşımının sizin için işi yapmasına izin verin:
s=$(stty -g </dev/tty)
(while stty raw -echo isig time 20 min 0;test -z "$(
dd bs=1 count=1 2>/dev/null; stty "$s")" || (exec sh)
do echo "$SECONDS:" do your stuff here maybe
echo no sleep necessary, I think
[ "$((i+=1))" -gt 10 ] && exit
done
) </dev/tty
whileDenemeniz için alay ettiğim küçük bir örnek döngü. Her iki saniyede bir dd, ' stdinyeniden yönlendirildi' /dev/ttyve whiledöngü döngüleri okuma girişiminde zaman aşımına uğrar. O veya dd does not zaman aşımı Bir tuşa basın - çünkü bu durumda etkileşimli bir kabuk çağrılır.
İşte bir test çalıştırması - her satırın başına yazdırılan sayılar kabuk değişkeninin değeridir $SECONDS:
273315: do your stuff here maybe
no sleep necessary, I think
273317: do your stuff here maybe
no sleep necessary, I think
273319: do your stuff here maybe
no sleep necessary, I think
273321: do your stuff here maybe
no sleep necessary, I think
sh-4.3$ : if you press a key you get an interactive shell
sh-4.3$ : this example loop quits after ten iterations
sh-4.3$ : or if this shell exits with a non-zero exit status
sh-4.3$ : and speaking of which, to do so you just...
sh-4.3$ exit
exit
273385: do your stuff here maybe
no sleep necessary, I think
273387: do your stuff here maybe
no sleep necessary, I think
273389: do your stuff here maybe
no sleep necessary, I think
273391: do your stuff here maybe
no sleep necessary, I think
273393: do your stuff here maybe
no sleep necessary, I think
273395: do your stuff here maybe
no sleep necessary, I think
273397: do your stuff here maybe
no sleep necessary, I think
sleep 10; notify-send hellodurmak için CTRL + Z tuşlarına basarsam,notify-send helloçalıştır. ikinci komut yürütülüyorsa nasıl olur da ilk işlem durdurulur? Bundan sonra, eğerfgi ikinci komut zaten yürütüldüğünden beri açık olan bir şey göremiyorsanız