Mit können ddSie zuverlässig ein einzelnes Byte aus einer Datei lesen. Mit können sttySie eine minAnzahl von Bytes festlegen , um einen Terminal-Lesevorgang und einen timeOut in Zehntelsekunden zu qualifizieren . Kombinieren Sie diese beiden und Sie können sleepganz darauf verzichten, denke ich, und lassen Sie einfach die Lesezeitüberschreitung des Terminals die Arbeit für Sie erledigen:
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
Das ist eine kleine Beispielschleife while, die ich verspottet habe, damit Sie sie ausprobieren können. Alle zwei Sekunden tritt eine ddZeitüberschreitung beim versuchten Lesen von stdin- umgeleitet von /dev/tty- und die whileSchleifenschleifen auf. Das oder dd nicht Time-out , weil Sie eine Taste drücken - in diesem Fall eine interaktive Shell aufgerufen wird.
Hier ist ein Testlauf - die am Kopf jeder Zeile aufgedruckten Zahlen sind der Wert der Shell-Variablen $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 hellound STRG + Z drücke,notify-send helloum anzuhalten, werde ich ausgeführt. Wenn der zweite Befehl ausgeführt wird, warum wird der erste Prozess gestoppt? danach, wenn Typ, kannfgich nicht sehen, dass etwas passiert, was offensichtlich ist, da der zweite Befehl bereits ausgeführt wird