Với ddbạn có thể đọc một byte đáng tin cậy từ một tệp. Với sttybạn có thể thiết lập một minsố byte để đủ điều kiện đọc thiết bị đầu cuối và timehết trong một phần mười giây. Tôi kết hợp cả hai và bạn có thể làm mà không cần sleephoàn toàn, tôi nghĩ, và chỉ để thời gian chờ đọc của thiết bị đầu cuối thực hiện công việc cho bạn:
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
Đó là một whilevòng lặp ví dụ nhỏ mà tôi đã thử để bạn thử. Cứ sau hai giây ddlại đọc thử stdin- chuyển hướng từ /dev/tty- và các whilevòng lặp. Điều đó hoặc dd không hết thời gian vì bạn nhấn một phím - trong trường hợp đó, một vỏ tương tác được gọi.
Đây là một lần chạy thử - các số được in ở đầu mỗi dòng là giá trị của biến 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 hellovà nhấn CTRL + Z để dừng,notify-send hellohãy thực hiện. Nếu lệnh thứ hai được thực thi thì làm sao quá trình đầu tiên bị dừng? sau đó nếu loạifgtôi không thể thấy bất cứ điều gì xảy ra, điều đó là hiển nhiên, vì lệnh thứ hai đã được thực thi