Mit können dd
Sie zuverlässig ein einzelnes Byte aus einer Datei lesen. Mit können stty
Sie eine min
Anzahl von Bytes festlegen , um einen Terminal-Lesevorgang und einen time
Out in Zehntelsekunden zu qualifizieren . Kombinieren Sie diese beiden und Sie können sleep
ganz 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 dd
Zeitüberschreitung beim versuchten Lesen von stdin
- umgeleitet von /dev/tty
- und die while
Schleifenschleifen 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 hello
und STRG + Z drücke,notify-send hello
um anzuhalten, werde ich ausgeführt. Wenn der zweite Befehl ausgeführt wird, warum wird der erste Prozess gestoppt? danach, wenn Typ, kannfg
ich nicht sehen, dass etwas passiert, was offensichtlich ist, da der zweite Befehl bereits ausgeführt wird