Growl Notifications para Conclusão de Tarefa Shell

12

(Específico do OSX)

Eu, como muitos outros além de mim, muitas vezes me encontro iniciando um processo no shell que leva um minuto ou dois para ser concluído (um commit svn grande, por exemplo). Durante esse tempo, muitas vezes alterno e atualizo o reddit / slashdot / wikipedia / whatever. Seria ótimo ter algo configurado que publique uma notificação de resmungo quando o processo do shell terminar.

No meu mundo ideal, funcionaria assim: "Se um processo apenas sair de uma guia aberta no Terminal, publique uma notificação de resmungo".

Alguém mais tem algo assim configurado?

    
por ezrock 02.11.2010 / 19:47

8 respostas

11

Você pode instalar growlnotify para fazer isso.

$ ./some_program && growlnotify Title -m Message

É claro que você precisaria pensar nisso antes de executar seu comando. A alternativa (eu não sei como conseguir isso) seria uma notificação Growl para cada comando, o que seria insanamente irritante.

Para simplificar o uso de growlnotify para seu caso de uso, edite ~/bash_profile e adicione o seguinte:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

agora você pode simplesmente long your_command (semelhante a sudo ). Ctrl-A posiciona o cursor no início da linha, se você (como eu) sempre digitar o comando real primeiro e precisar adicionar o prefixo posteriormente.

Meu bash-fu infelizmente é insuficiente para poder adicionar o comando à mensagem growlnotify

Comentário de per @ mankoff para esta resposta:

Você pode simplesmente digitar enquanto o comando está em execução, ele é executado depois. Eu criei a seguinte função para mim:

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

Use como gn svn .

    
por 02.11.2010 / 19:58
2

O que você precisa é de growlnotify , que é um programa CLI para acionar notificações de grunhidos. Você poderia usá-lo como:

./script.sh;; growlnotify -m "done"

Ele tem mais alguns botões que você pode usar, use growlnotify -h para mais informações

    
por 02.11.2010 / 19:59
2

Modificando a resposta de Daniel Beck, se você fizer essa pequena alteração, ficará muito bom.

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

Então, quando você executar o comando 'svn up longo', verá a mensagem 'svn up completed'.

Muito bom se você executar muitos scripts de shell demorados ao mesmo tempo.

    
por 16.03.2012 / 15:41
2

Agora que o OSX 10.8 e posterior têm notificações nativas, é assim que obtenho o mesmo objetivo por meio do terminal-notifier :

  1. Instale a bebida
  2. $ brew install terminal-notifier
  3. Adicione isso a ~/.bash_profile :

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }
    

Certifique-se de ter originado seu perfil com . ~/.bash_profile (não necessário para futuras sessões de terminal), já que seu perfil é originado automaticamente ao criar uma sessão.

Teste com seu comando favorito, seguido pela chamada de função.

ls ; gn

Os argumentos para o terminal-notifier podem melhorar, mas uma tentativa rápida de pegar o comando anterior para passar para a função não foi bem-sucedida e isso me fornece todas as funcionalidades que eu preciso. Ou seja, adicionando ;gn para obter uma notificação no final de qualquer processo de execução longa.

    
por 17.06.2014 / 14:32
1

Use growlnotify .

ls && growlnotify -H localhost -m "message"
    
por 02.11.2010 / 20:01
1

Esta é uma forma de invocá-lo automaticamente para processos "de longa duração": link

Ele conecta-se ao $PROMPT_COMMAND e notifica a conclusão de processos que levam mais de 10 segundos para serem concluídos. Talvez seja necessário ajustá-lo para adequar-se ao seu próprio ambiente e fluxo de trabalho (por exemplo, ignorando a conclusão de less ou invocação do editor), mas parece funcionar razoavelmente bem de saída.

    
por 06.08.2012 / 05:07
0

Eu apenas pesquisei um pouco mais e encontrei um método simples para isso. É um pouco mais manual do que eu gostaria que fosse, mas aqui vai.

  1. Instale o growlnotify (está na pasta extras do download da instalação do Growl) 1.
  2. Anexar < && growlnotify -m "Message" > para um longo processo.

Isso funciona para mim agora, mas eu poderia fazer melhor, eu acho.

    
por 02.11.2010 / 20:00
0

Solução OSX 10.9+ sem software de terceiros:

No OSX 10.9 e superior, você pode usar o comando AppleScript display notification para exibir um resmungo do terminal da seguinte forma:

osascript -e 'display notification with title "Process Completed."'

Se você não quiser digitar tudo isso todas as vezes, use um alias :

alias growl='osascript -e "display notification with title \"Process Completed.\""'

Exemplo:

long-running-script.sh; growl
    
por 13.01.2015 / 22:29