EDITAR
TL; DR : criar atalho de preenchimento automático .inputrc
e funcionar em .bashrc
. Execute o comando como de costume, digite, mas, em vez de ENTER, pressione o atalho especificado em.inputrc
A pessoa que colocou recompensa nessa questão disse:
"Todas as respostas existentes exigem a digitação de um comando adicional após o comando. Quero uma resposta que faça isso automaticamente."
Enquanto pesquisava as soluções para esse problema, eu me deparei com essa pergunta no stackexchange, que permite a ligação CtrlJa uma sequência de comandos: Ctrla(vá para o início da linha), coloque a string "mesure" na frente do comando que você digitou, Ctrlm(execute)
Assim, você obtém a funcionalidade de preenchimento automático e ENTERcomando separado para medir o tempo, enquanto mantém o objetivo original da segunda função que publiquei abaixo.
A partir de agora, aqui está o conteúdo do meu ~/.inputrc
arquivo:
"\C-j": "\C-a measure \C-m"
E aqui está o conteúdo de .bashrc
(note, eu não uso o bash há sempre - eu uso o mksh como meu shell, portanto é isso que você vê no post original. A funcionalidade ainda é a mesma)
PS1=' serg@ubuntu [$(pwd)]
================================
$ '
function measure ()
{
/usr/bin/time --output="/home/xieerqi/.timefile" -f "%e" $@
if [ $( cat ~/.timefile| cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Correio Original
Aqui está a minha ideia - usar uma função no .bashrc
. Princípio básico - use /usr/bin/time
para medir o tempo necessário para a conclusão do comando e, se demorar mais de 15 segundos, envie uma notificação.
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Aqui estou redirecionando a saída para, /dev/null
mas para visualizar a saída, o redirecionamento para o arquivo também pode ser feito.
Uma abordagem muito melhor, IMHO, é enviar saída de tempo para algum arquivo na sua pasta pessoal (apenas para você não poluir seu sistema com arquivos de tempo e sempre saber para onde procurar). Aqui está a segunda versão
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
E aqui estão as capturas de tela da primeira e da segunda versão, nessa ordem
Primeira versão, sem saída
Segunda versão, com saída