Como faço para que o terminal iTerm me notifique quando um trabalho / processo for concluído?

105

Uma notificação da central de notificações seria ideal, mas rosnar, bounce dock, som, etc. também seriam adequados (ou se isso só puder ser feito em Terminal.app, gostaria de voltar). Existe uma opção em algum lugar do iTerm para ativar as notificações ou é algo que devo digitar no final de um comando no terminal? Nesse último caso, é possível adicionar um alerta depois que o processo for iniciado (por exemplo, se eu perceber que vai demorar mais do que eu esperava inicialmente, não posso adivinhar).

veracidade
fonte

Respostas:

197

Notificar sobre um processo já em execução

Atalho: Aou:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

Olho assustador!: iTermirá literalmente vigiar (no canto superior direito) do seu terminal. Assim que o comando for concluído, ele entrará em contato com o Notification Center.

Por quê?

Já lançamos o comando. Subestimamos o tempo necessário para a conclusão, não queremos cancelá-lo e nos recusamos a sentar e assistir. por exemplo, brew updatedepois de muito tempo!

Requisitos

iTerm: Integração com Shell:

iTerm2 -> Install Shell Integration

Observe que a integração não mostrará notificações até que o iTerm2 seja reiniciado.

Paschalis
fonte
11
Depois de instalar as integrações de shell, você pode querer ir para iTerm2 -> Preferências -> Perfis -> Terminal, role para baixo e desmarque "Mostrar indicadores de marca", não gostei dessa integração de shell. Você também pode querer Editar -> Marcas e anotações -> Alertas -> Postar notificação se desejar as notificações do sistema operacional em vez de um pop-up de estilo de alerta.
Charles L.
@simonhamp, sugiro o uso de triggers ( iterm2.com/documentation-triggers.html ) para sessões enterradas
phirschybar
3
@dwanderson Você já fez isso funcionar com o tmux? Isso seria muito útil
Lucas
@Lucas há uma linha na documentação que diz que a integração do shell não funciona com tmux ou screen iterm2.com/documentation-shell-integration.html
Rich Stone
2
Esse olho me assusta !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Você pode adicionar qualquer um dos seguintes após qualquer comando, com um ponto e vírgula entre o comando e ele:

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

ou, se você gosta da Central de Notificações

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

Você também pode fazer um alias em seu perfil, chamado notifye adicioná-lo ao final do seu comando. Então, em seu perfil de login

alias notify="tput bel"

então

sleep 10; notify

Ou, se você iniciou seu comando e ele está "travado", basta digitar notifye clicar Entere ele executará seu notifyapelido no final, quando o comando terminar, por exemplo

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Mark Setchell
fonte
Hmm, com este comando osascript -e 'display notification "Task finished" with title "Terminal"', parece que estou recebendo este erro2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
veracidade
parte dois do erro/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
veracidade
Você está em um sistema mais antigo do que Mavericks ou Yosemite?
Mark Setchell
Não, Yosemite 10.10.3
veracidade
Oh, isso é estranho. Você pode tentar algo mais simples como osascript -e 'display notification "Hello"'- especificamente copiando e colando daqui.
Mark Setchell
33

E você sempre pode usar o saycomando.

Normalmente, quando você está executando um longo processo dentro do terminal e deseja ser atualizado, você pode simplesmente usar este comando para falar coisas como doneou errorou bazinga.

mvn clean install; say done 

Este comando constrói um aplicativo java spring, leva muito tempo e falará donequando o processo for concluído.

Farhan Salam
fonte
16

iTerm2suporta Growlnotificações. Você pode ativá-lo nas configurações de cada perfil.

Selecione um perfil em Preferences…-> Profiles. Então, na Terminalguia, há uma opção Enable Growl Notifications.

Lembre-se também de habilitar iTermnotificações nas Growlpreferências.

Se você deseja receber uma notificação para um determinado processo, pode experimentar Triggers. Você define os gatilhos na Advancedguia das configurações de um perfil. Desta forma, você pode atribuir uma notificação Growl a uma saída específica do seu processo (regexp).

Você poderia, por exemplo:

$ mycommand; echo "end-of-my-process"

E conecte o gatilho à mensagem "fim do meu processo".

Atualizar

Leia mais sobre gatilhos em iTerm2.com .

baf
fonte
Então, estou correto que não existe uma maneira global de obter um alerta para qualquer processo concluído porque eu preciso executar o script uma vez para saber o que ele escreve no final do processo (e eu tenho que criar um para cada script que executo )? Por exemplo, a última linha de um processo do youtube-dl é, [download] 100% of 40.13MiB in 00:13mas esta linha é repetida para cada arquivo que termina. O que eu colocaria como string de 'fim do meu processo'? Posso fazer um gatilho para quando o prompt do shell padrão ~ >aparecer novamente?
truth1ness
@ truth1ness Não acho que haja uma maneira genérica de ser informado sobre o processo finalizado. iTermenvia notificações para nova saída do terminal, para o final da saída do terminal. Isso pode funcionar para alguns processos. A maneira de trabalhar para todos os processos é a que sugeri. A mensagem "fim do meu processo" pode ser qualquer string exclusiva. Único de tal forma que não será impresso pelo seu processo. Pode ser literalmente um texto de "fim do meu processo". Você deve inserir exatamente a mesma string na definição do acionador e anexar uma notificação a ela. Não sei se funcionará com o prompt do shell. Você deve tentar você mesmo.
baf
Ah, eu entendi mal, entendi agora. Consegui obter um alerta com a saída de eco "fim do meu processo". No entanto, também recebo um alerta quando realmente emito o comando echo antes do início do processo. Como eu diria ao iTerm para ignorar a string quando eu realmente emitir o comando e apenas olhar para a string ecoada? No arquivo de ajuda, tentei anexar o regex do gatilho com \ 0 ("O valor inteiro combinado pela expressão regular."), Mas ele ainda executa o gatilho duas vezes.
truth1ness
@ truth1ness Seja criativo, por exemplo, use echo "end-of-""my-process" entre aspas. Ele corresponderá ao texto "fim do meu processo" apenas quando o processo terminar.
baf
9

Existe uma ferramenta OSS chamada noti .

Você pode instalá-lo facilmente brew install notie começar a usá-lo apenas prefixando seu comando com notilike noti sleep 3.

junjian.xu
fonte
3

Você também pode usar as terminal-notifiernotificações do sistema do mac os. Para instalá-lo através do Home brew apenas:

$ brew install terminal-notifier

Então, se você quiser exibir uma notificação quando seu trabalho / processo estiver concluído, use algo como isto

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

E esta tela assim:

insira a descrição da imagem aqui

Você também pode alterar o som e o ícone das notificações. Mais informações no repositório github: https://github.com/julienXX/terminal-notifier

MaSza
fonte
1

Instale a integração do shell iTerm2

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

Execute seu comando e concatene o app de atenção, por exemplo

./task && ~/.iterm2/it2attention once

Isso fará com que o aplicativo iTerm salte seu ícone quando o trabalho for concluído.

Você também tem outras opções de atenção:

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
Leonardo
fonte