Como posso acionar uma notificação de um terminal remoto no OS X

3

Estou executando um longo processo em um shell remoto. Gostaria de acionar uma notificação quando o processo estiver concluído. Esta resposta não é suficiente, porque o comando longo está em um servidor remoto, por isso não pode chamar o notificador de terminal.

Eu posso chegar perto do meu resultado desejado usando um gatilho iTerm2. Por exemplo, se eu executar o seguinte no servidor remoto e configurar um acionador iTerm2 para __FINISHED__:

./long_process && echo "\__FINISHED__"

Isso tem o recurso indesejável que toda vez que eu rolar de volta para este comando no meu editor ou meu código (estou executando código em um shell do emacs), a notificação é acionada.

Uma solução pode ser algum tipo de notificação de texto que o iTerm2 reconheça, mas que não aparecerá em um buffer de rolagem do emacs.

    
por pnj 13.09.2013 / 20:49

2 respostas

5

Você não especificou que tipo de notificação deseja nem que sistema operacional o servidor remoto está executando, portanto, terei que fazer algumas suposições aqui. Eu suponho que você não se importa com o tipo de notificação, desde que você seja notificado e que o servidor remoto esteja executando algum tipo de * nix.

  1. Envie um e-mail para você mesmo. Se sendmail estiver configurado no servidor, você poderia fazer

    ./long_process && echo "Job done" | sendmail [email protected]
    
  2. ssh de volta a sua máquina local (assumindo que isso é possível) e faça com que ela fale com você. Veja aqui para obter maneiras mais interessantes de fazer o bip do OSX em você.

    ./long_process && ssh [email protected] say "Yo! All done"
    

    ou

    ./long_process && ssh [email protected] terminal-notifier -message "Job finished!" -title "Info"
    

    Se você estiver se conectando de um IP dinâmico e você configurou seu roteador para que você possa ssh para esse IP dinâmico, você pode fazer isso (supondo que você esteja atualmente conectado a partir de sua máquina remota) :

    ip=$(who | grep $USER | perl -lne 's/\((.+?)\)\s*$//; print "$1"' | tail -n 1) &&
     ./long_process && ssh you@$ip terminal-notifier -message "Job finished!" -title "Info"
    

    Você pode configurar o ssh sem senha no caminho normal . Não deve ser afetado pelo IP dinâmico. Depois de ter feito isso, o código acima funcionará.

  3. Use o pushover e envie uma notificação para o seu dispositivo Android ou iOS (se você tiver um)

    ./long_process && pushover.pl "All done"
    
por 13.09.2013 / 22:21
2

Você pode echo um sino - \a no terminal remoto: ./long_process ; echo -e '\a'

Alguns emuladores de terminal reproduzem algum tipo de som e podem mostrar notificações. O iTerm2, em particular, mostrará uma notificação e reproduzirá um som, se a aba do processo não estiver focada.

Além disso, observe que usei ; para separar comandos. Dessa forma, você será notificado mesmo quando o comando retornar um status diferente de zero, enquanto && será executado somente se o comando for bem-sucedido.

    
por 09.01.2017 / 22:18