2017-04-19 3 views
1

Ich arbeite an Linux-Shell und ich versuche, ein Skript zu schreiben, die wie unten wie ein Trigger ist:
Ist es möglich, wie lange zu erkennen, hat keinen Befehlsbenutzertyp

if user hasn't typed any command for 2 min 
    execute some executable file 
fi 

Wenn ich solch ein Skript haben kann, könnte ich es als Daemon-Prozess machen. Zum Beispiel könnte ich mein System dies auszukommen:

if user stops typing command for 2 min 
    shutdown -h now 
fi 

Antwort

2

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.

Verwandte Themen