Como mandar um alerta para a Central de Notificações a partir de scripts ou do Terminal

Mandar um alerta para a Central de Notificações do Mountain Lion pode ser útil para registrar o status de um script não-interativo, ou mesmo para indicar que um script interativo completou sua tarefa, ou está aguardando alguma ação do usuário.

Recentemente vimos várias técnicas de notificações em scripts, incluindo fazer o ícone do Terminal pular na Dock, tocar um som e enviar um alerta ao Growl, entre outros.

Mas o Mountain Lion fez a cortesia de trazer um novo método para notificações, e é natural que ele também possa ser acessado por meio dos seus scripts. Uma das primeiras formas para fazê-lo é por meio do utilitário terminal-notifier, criado por Eloy Durán e disponibilizado para download sob uma licença open source permissiva (MIT).

Após instalar o utilitário em um computador rodando o Mountain Lion, é só chamar a partir dos seus scripts, passando como parâmetro o título e texto das mensagens e, opcionalmente, uma URL, aplicativo ou comando a ativar caso o usuário clique na notificação.

Instalando o terminal-notifier

No momento a instalação para uso por scripts shell não segue os modelos típicos de utilitários para OS X, portanto o seu uso pode ser melhorado caso você saiba manipular a variável PATH, criar um alias para o comando ou mesmo movê-lo para o caminho de execução da sua shell.

Não veremos nada disso hoje – o foco é a ferramenta, portanto os exemplos vão ser genéricos, instalando direto no diretório home, com menção a paths bem longos em todos os casos, e sem mover os arquivos para os locais preferíveis (mantendo-os, portanto, no local em que forem descompactados). A adequação aos melhores padrões de manutenção de sistemas fica como um exercício para o leitor.

No meu caso, que cliquei no download da versão 1.4.2 no site de download da ferramenta (fazendo com que fosse gravado no diretório Downloads do meu usuário, correspondente à pasta que o Finder chama de Transferências), executei os seguintes comandos no Terminal para descompactar:

cd
unzip Downloads/terminal-notifier_1.4.2.zip 
mv terminal-notifier_1.4.2 tn

Nota: os trechos em verde no segundo e terceiro comandos correspondem ao nome do arquivo criado pelo download e ao nome do diretório criado pela descompactação, e podem variar no seu caso.

Após os 3 comandos acima, o executável do terminal notifier pode ser chamado pelos seus scripts como ~/tn/terminal-notifier.app/Contents/MacOS/terminal-notifier (e volto a lembrar que mover os componentes para diretórios adequados, enquanto o instalador não passar a fazê-lo, fica como exercício para o leitor).

Usando o terminal-notifier

Agora que o utilitário já está instalado (e vamos considerar que você o manteve no mesmo local mencionado acima, sem ter ainda movido para um local mais adequado, ou ajustado seu path ou criado um alias, wrapper, etc.), é só chamá-lo a partir dos seus scripts, usando os argumentos adequados a cada caso.

Um exemplo bem simples, que apenas expõe uma mensagem com título, é:

~/tn/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "Titulo da mensagem" -message "Exemplo de mensagem"

Para que seja possível abrir um aplicativo quando o usuário clicar na notificação, pode ser usado o parâmetro activate, seguido do identificador do bundle do aplicativo em questão, como no exemplo:

~/tn/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "Erro nas contas" -message "Verifique os resultados manualmente" -activate com.apple.Calculator

O identificador do bundle pode ser encontrado na chave CFBundleIdentifier, no arquivo Info.plist dentro do pacote do aplicativo correspondente.

Se preferir chamar pelo nome do executável, e não pelo nome do bundle, troque o activate pelo parâmetro execute.

Você pode também fazer com que uma URL seja aberta no navegador caso a notificação seja clicada, usando o parâmetro open, como no exemplo:

~/tn/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "Site atualizado" -message "O novo post foi publicado na capa do site" -open "http://br-mac.org/"

Tem alguns recursos adicionais: subtítulos, agrupamento de mensagens de um mesmo tema, remoção de notificações prévias e mais: a capa do site do utilitário tem uma descrição detalhada dos parâmetros relacionados.

Acima você vê um exemplo de wrapper que eu criei para poder usar o mesmo comando de notificação (no meu caso, mynotify "titulo da mensagem" "texto da mensagem") tanto em máquinas com o Mountain Lion como em outras com versões anteriores do OS X. Se ele detecta que o OS X é o 10.8 (Mountain Lion), assume que o terminal-notifier estará instalado e o usa; caso contrário, verifica se o growlnotify está instalado (e o usa, se estiver), ou então se limita a fazer um beep. Modifique-o como desejar!

Agora é só usar, mas preferencialmente gaste alguns minutos adicionais movendo os componentes do terminal-notifier para um local adequado no seu sistema e ajustando o PATH (ou aliases, funções, um wrapper como o código acima, etc.) de acordo ツ - e não deixe de olhar as outras técnicas de notificações em scripts que vimos recentemente, pois pode ser interessante combiná-las, ou mesmo recorrer a alguma delas como alternativa para quando o sistema não estiver rodando o Mountain Lion!

Comentar

Comentários arquivados

Artigos recentes: