साथ dd
आप मज़बूती से किसी फ़ाइल से कोई एकल बाइट पढ़ सकते हैं। साथ stty
आप एक सेट कर सकते हैं min
एक टर्मिनल पढ़ा है और एक अर्हता प्राप्त करने के बाइट की संख्या time
एक दूसरे का दसवां में बाहर। उन दोनों को मिलाएं और आप sleep
पूरी तरह से बिना कर सकते हैं , मुझे लगता है, और बस टर्मिनल के रीडआउट को आपके लिए काम करने दें:
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
यह एक छोटा सा उदाहरण while
पाश है जिसे मैंने आपके लिए आज़माया है। हर दो सेकंड में dd
इसके पढ़े हुए प्रयास पर कई बार stdin
- से अनुप्रेषित /dev/tty
- और while
लूप लूप। क्योंकि आप एक कुंजी दबाते हैं, तो उस समय-आउट dd
नहीं होता है - जिस स्थिति में एक इंटरेक्टिव शेल है।
यहाँ एक परीक्षण रन है - प्रत्येक पंक्ति के शीर्ष पर छपी संख्याएँ शेल चर का मान है $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
और रोकने के लिए CTRL + Z दबाता हूं, तोnotify-send hello
निष्पादित हो जाओ। यदि दूसरी कमांड निष्पादित हो रही है तो पहली प्रक्रिया को कैसे रोका जाए? उसके बाद अगर टाइप करें तोfg
मैं कुछ भी होता हुआ नहीं देख सकता, जो कि स्पष्ट है, क्योंकि दूसरी कमान पहले ही निष्पादित हो चुकी है