Temporizador de inatividade
A execução de um comando atrasado é simples: sleep <sleep time>; run_a_command
Envolvendo isso nas funções do cronômetro de início / fim:
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
}
Você pode adicionar o seu arquivo shell rc. Agora você precisa executar inactivity-start-timer
antes de cada prompt e inactivity-stop-timer
antes de cada execução do comando. (Você não quer um bip se o comando demorar muito, não é?) Isso também pressupõe que você tenha o sistema ligado, caso contrário, coloque outro comando em INACTIVITY_CMD
.
Bash
Eu estou supondo que você use bash? Nesse caso, há PROMPT_COMMAND para executar um comando antes de cada solicitação. Mas nada embutido para executar antes de cada execução de comando. Existe um truque conhecido para obter esse aqui . Então adicione isso também ao seu .bashrc:
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
Se você usar o zsh, por outro lado, o mais simples :
autoload -Uz add-zsh-hook
add-zsh-hook precmd inactivity-start-timer
add-zsh-hook preexec inactivity-stop-timer