EDITAR
TL; DR : cria um atalho de preenchimento automático em .inputrc
e funciona em .bashrc
. Execute o comando como de costume, digite, mas ao invés de ENTER , pressione o atalho que você especificou em .inputrc
A pessoa que colocou recompensas nessa pergunta disse:
"Todas as respostas existentes exigem a digitação de um comando adicional
após o comando. Eu quero uma resposta que faça isso automaticamente. "
Enquanto pesquisava as soluções para este problema, me deparei com esta questão do stackexchange, que permite vincular Ctrl J para uma seqüência de comandos: Ctrl a (mova para o início da linha), coloque a string "mesure" na frente do comando que você digitou, Ctrl m (executar)
Assim você obtém funcionalidade de preenchimento automático e separa o comando ENTER para medir o tempo, enquanto mantém o propósito original da função segundo que eu postei abaixo.
A partir de agora, aqui está o conteúdo do meu arquivo ~/.inputrc
:
"\C-j": "\C-a measure \C-m"
E aqui está o conteúdo de .bashrc
(note, eu não uso bash para sempre - eu uso o mksh como meu shell, e é 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
}
Publicação original
Aqui está minha ideia - use uma função em .bashrc
. Princípio básico - use /usr/bin/time
para medir o tempo que o comando leva para ser concluído e, se for 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 a saída de tempo para algum arquivo na sua pasta pessoal (só assim você não polui o seu sistema com timefiles, e sempre sabe onde procurar). Aqui está essa 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 segunda versão, nessa ordem
Primeira versão, sem saída
Segunda versão, com saída