Sie müssen vorsichtig sein ... zum Beispiel was passiert, wenn der Befehl selbst länger als 2 Minuten dauert auszuführen? Das Herunterfahren des Systems ist in diesem Fall wahrscheinlich unerwünscht.
Der einzige Weg, um dieses Verhalten zu bekommen, ist aus der Shell-Anwendung (nicht als eine separate Einheit/Daemon), wo man über den Zustand kennen - zB: GETTING_COMMAND
oder EXECUTING_COMMAND
...
In bash
Sie TMOUT
variable verwenden können:
TMOUT
auf einen Wert Bei der Einstellung größer als Null ist, TMOUT als Standard-Timeout für die Lese gebautet behandelt wird (siehe Bash Builtins). Der Befehl select (siehe Bedingte Konstrukte) wird beendet, wenn die Eingabe nach TMOUT Sekunden nicht eintrifft, wenn die Eingabe von einem Terminal kommt. In einer interaktiven Shell wird der Wert als die Anzahl der Sekunden interpretiert, die nach Eingabe der primären Eingabeaufforderung auf eine Eingabezeile warten. Bash wird beendet, nachdem auf diese Anzahl von Sekunden gewartet wurde, wenn keine vollständige Zeile der Eingabe eintrifft.
Beachten Sie, dass dies auch keine Anrufe zu read
oder select
dass das Skript macht beeinflussen.
So etwas wie dies tun würde, was Sie nach:
export TMOUT=120
bash
shutdown -h now
Wenn Sie Ihre eigene Schale entwickeln, dann natürlich könnte man so etwas wie select(2)
verwenden, während die Eingabe des Benutzers nehmen.