Como faço um pop-up / alerta do Terminal Mac? Applescript?

107

Quero que meu programa exiba um alerta, aviso, o que quer que exiba meu texto personalizado. Como isso é feito? Além disso, é possível fazer um com vários botões que define uma variável?

Semelhante ao do lote: echo msgbox""<a.vbs&a.vbs

JShoe
fonte

Respostas:

213

Use osascript. Por exemplo:

osascript -e 'tell app "Finder" to display dialog "Hello World"' 

Substituindo “Finder” por qualquer aplicativo que você deseja. Observe que, se esse aplicativo estiver em segundo plano, a caixa de diálogo também aparecerá em segundo plano. Para sempre mostrar em primeiro plano, use “Eventos do sistema” como o aplicativo:

osascript -e 'tell app "System Events" to display dialog "Hello World"'

Leia mais em Dicas Mac OS X .

Anne
fonte
Espere, você pode abreviar aplicativo como aplicativo?
JShoe
O mecanismo AppleScript o substituirá automaticamente. Basta colar a linha entre as aspas no Editor AppleScript. Ao clicar em Executar, ele substitui o aplicativo automaticamente pelo aplicativo antes da execução.
Anne,
Outra proteção de digitação: você não precisa de "end if", "end repeat", etc., apenas "end" está bem e o AppleScript irá inserir a segunda palavra.
Nicholas Riley,
7
Se você não deseja o botão "Cancelar", mas deseja apenas um botão "OK", substitua {diálogo} por {alert}.
Bart B
1
13havik, bem, eu sei que é um assunto antigo, mas sim, você pode. :) No entanto, você precisa estar logado. Por exemplo, pelo terminal ssh. e invocar osascript -e 'display dialog "Hello!"'
Alex Reds
61

Use este comando para acionar a notificação do centro de notificação a partir do terminal.

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
Pradeep Vairamani
fonte
61

Se você estiver usando qualquer versão do Mac OS X que tenha o Notification Center, você pode usar o terminal-notifier gem. Primeiro instale-o (pode ser necessário sudo):

gem install terminal-notifier

e então simplesmente:

terminal-notifier -message "Hello, this is my message" -title "Message Title"

Veja também esta postagem do OS X Daily .

Enrico Carlesso
fonte
5
Isso é simplesmente muito melhor do que o antigo material de osascript.
Jonny
Isso parece não funcionar no 10.7.5 (Lion), aparentemente sem Centro de Notificação nele.
Norman H
4
brew install terminal-notifiertambém funciona se você preferir preparar.
gklka
5
PSA: No Mavericks e posteriores, isso não é necessário, basta usar a notificação de exibição do osascript , que é mencionada abaixo na resposta de Pradeep.
alexchandel
7

Isso restauraria o foco para o aplicativo anterior e sairia do script se a resposta estivesse vazia.

a=$(osascript -e 'try
tell app "SystemUIServer"
set answer to text returned of (display dialog "" default answer "")
end
end
activate app (path to frontmost application as text)
answer' | tr '\r' ' ')
[[ -z "$a" ]] && exit

Se você instruir os eventos do sistema a exibir a caixa de diálogo, haverá um pequeno atraso se não estiver em execução antes.

Para obter a documentação sobre a caixa de diálogo de exibição, abra o dicionário de Adições padrão no Editor AppleScript ou consulte o Guia de linguagem AppleScript .

Lri
fonte
4

Adicionando legenda , título e um som à notificação:

Com AppleScript :

display notification "Notification text" with title "Notification Title" subtitle "Notification sub-title" sound name "Submarine"

Com terminal / bash e osascript:

osascript -e 'display notification "Notification text" with title "Notification Title" subtitle "Notification sub-title" sound name "Submarine"'

Um alerta pode ser exibido em vez de uma notificação

Não leva o subtítulo nem o som forte.

Com AppleScript :

display alert "Alert title" message "Your message text line here."

Com terminal / bash e osascript:

osascript -e 'display alert "Alert title" message "Your message text line here."'

Adicione uma linha em bash para reproduzir o som após a linha de alerta:

afplay /System/Library/Sounds/Hero.aiff

Adicione a mesma linha em AppleScript , permitindo que o shell script faça o trabalho:

do shell script ("afplay /System/Library/Sounds/Hero.aiff")

Lista de sons integrados do macOS para escolher aqui .

Paráfrase de um artigo útil sobre notificações de terminal e applecript .

andyNilson
fonte
3

E meus 15 centavos. Um liner para o terminal mac etc, basta definir o MIN = para qualquer coisa e uma mensagem

MIN=15 && for i in $(seq $(($MIN*60)) -1 1); do echo "$i, "; sleep 1; done; echo -e "\n\nMac Finder should show a popup" afplay /System/Library/Sounds/Funk.aiff; osascript -e 'tell app "Finder" to display dialog "Look away. Rest your eyes"'

Um exemplo de bônus para inspiração para combinar mais comandos; isso vai colocar um mac em espera hibernar após a mensagem também :) o login do sudo é necessário então, uma multiplicação como 60 * 2 por duas horas também vai

sudo su
clear; echo "\n\nPreparing for a sleep when timers done \n"; MIN=60*2 && for i in $(seq $(($MIN*60)) -1 1); do printf "\r%02d:%02d:%02d" $((i/3600)) $(( (i/60)%60)) $((i%60)); sleep 1; done; echo "\n\n Time to sleep  zzZZ";  afplay /System/Library/Sounds/Funk.aiff; osascript -e 'tell app "Finder" to display dialog "Time to sleep zzZZ"'; shutdown -h +1 -s
K. Kilian Lindberg
fonte
0

Fiz um script para resolver isso que está aqui . Você não precisa de nenhum software extra para isso. Instalação:
brew install akashaggarwal7/tools/tsay
Uso:
sleep 5; tsay

Sinta-se à vontade para contribuir!

Akash Agarwal
fonte
9
"não precisa de nenhum software extra ... apenas instale" que é um software extra.
PRS
@PRS é um script que executa comandos já disponíveis para o macOS, não um software.
Akash Agarwal
2
então porque eu tenho que instalar o brew e seu script? vê o que quero dizer? ;)
PRS de
no entanto, vou dar-lhe crédito por me apresentar ao comando dizer ... Aprendi algo novo hoje! lol
PRS de
@PRS Que bom que você encontrou o comando say, é bastante útil. Sobre o seu outro comentário, acho que se você é um desenvolvedor de cerveja, é muito comum usar. E sobre a instalação do script, fique à vontade para abrir o código-fonte do script e copiá-lo / colá-lo localmente em um arquivo e fazer chmod + xe executá-lo;)
Akash Agarwal