Inaktivitäts-Timer
Einen verzögerten Befehl auszuführen, ist einfach: sleep <sleep time>; run_a_command
Umhüllen der Start / Stopp-Timerfunktionen:
INACTIVITY_TIME='5m' INACTIVITY_CMD='echo -ne \a' function inactivity-start-timer () { (sleep "$INACTIVITY_TIME"; $INACTIVITY_CMD) & INACTIVITY_PID=$! disown } function inactivity-stop-timer () { kill $INACTIVITY_PID > /dev/null 2>&1 }
Sie können diese Shell-RC-Datei hinzufügen. Jetzt müssen Sie inactivity-start-timer
vor jeder Eingabeaufforderung und inactivity-stop-timer
vor jeder Befehlsausführung ausführen. (Sie möchten keinen Piepton, wenn der Befehl zu lange dauert, oder?) Dies setzt auch voraus, dass Sie die Systemklingel eingeschaltet haben, ansonsten geben Sie einen anderen Befehl ein INACTIVITY_CMD
.
Bash
Ich vermute, du benutzt bash? In diesem Fall muss PROMPT_COMMAND vor jeder Eingabeaufforderung einen Befehl ausführen. Es ist jedoch nichts eingebaut, um vor jeder Befehlsausführung ausgeführt zu werden. Es gibt einen bekannten Trick, um das hier zu bekommen . So fügen Sie dies auch zu Ihrem .bashrc hinzu:
PROMPT_COMMAND=inactivity-start-timer preexec () { inactivity-stop-timer } preexec_invoke_exec () { [ -n "$COMP_LINE" ] && return # do nothing if completing [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; preexec "$this_command" } trap 'preexec_invoke_exec' DEBUG
Zsh
Wenn Sie jedoch zsh verwenden, ist es einfacher :
autoload -Uz add-zsh-hook add-zsh-hook precmd inactivity-start-timer add-zsh-hook preexec inactivity-stop-timer