Dengan ddAnda dapat dengan andal membaca satu byte dari file. Dengan sttyAnda dapat mengatur minsejumlah byte untuk memenuhi syarat terminal baca dan timekeluar dalam sepersepuluh detik. Kombinasikan keduanya dan Anda dapat melakukannya tanpa sleepsepenuhnya, 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 whileloop yang saya coba-coba untuk Anda coba. Setiap dua detik ddkeluar dari percobaan membaca stdin- diarahkan dari /dev/tty- dan whileloop 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 hellodan tekan CTRL + Z untuk berhenti,notify-send hellojalankan. jika perintah kedua dijalankan, mengapa proses pertama dihentikan? setelah itu jika ketikfgsaya tidak bisa melihat sesuatu terjadi, yang jelas, karena perintah kedua sudah dijalankan