Dengan dd
Anda dapat dengan andal membaca satu byte dari file. Dengan stty
Anda dapat mengatur min
sejumlah byte untuk memenuhi syarat terminal baca dan time
keluar dalam sepersepuluh detik. Kombinasikan keduanya dan Anda dapat melakukannya tanpa sleep
sepenuhnya, saya pikir, dan biarkan batas waktu terminal baca bekerja untuk Anda:
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
Itu adalah contoh kecil while
loop yang saya coba-coba untuk Anda coba. Setiap dua detik dd
keluar dari percobaan membaca stdin
- diarahkan dari /dev/tty
- dan while
loop loop. Itu atau dd
tidak time-out karena Anda menekan tombol - dalam hal ini shell interaktif dipanggil.
Berikut ini adalah uji coba - angka yang dicetak di kepala setiap baris adalah nilai dari variabel shell $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 hello
dan tekan CTRL + Z untuk berhenti,notify-send hello
jalankan. jika perintah kedua dijalankan, mengapa proses pertama dihentikan? setelah itu jika ketikfg
saya tidak bisa melihat sesuatu terjadi, yang jelas, karena perintah kedua sudah dijalankan