Come faccio a creare un popup / avviso per il terminale Mac? Applescript?


107

Voglio che il mio programma visualizzi un avviso, un avviso, qualunque cosa visualizzi il mio testo personalizzato. Come si fa? Inoltre, è possibile crearne uno con più pulsanti che imposta una variabile?

Simile a batch: echo msgbox""<a.vbs&a.vbs

Risposte:


213

Usa osascript. Per esempio:

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

Sostituisci "Finder" con qualsiasi app desideri. Nota se l'app è in background, anche la finestra di dialogo apparirà in background. Per mostrare sempre in primo piano, utilizza "Eventi di sistema" come app:

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

Per saperne di più su Mac OS X Hints .


Aspetta, puoi abbreviare l'applicazione come app?
JShoe

Il motore AppleScript lo sostituirà automaticamente. Basta incollare la linea tra le virgolette in AppleScript Editor, quando premi Esegui, sostituisce automaticamente l'app con l'applicazione prima dell'esecuzione.
Anne

Un altro risparmio di digitazione: non è necessario "end if", "end repeat", ecc., Solo "end" va bene e AppleScript inserirà la seconda parola.
Nicholas Riley

7
Se non vuoi il pulsante "Annulla" ma vuoi solo un pulsante "OK", sostituisci {dialog} con {alert}.
Bart B

1
13havik, lo so che è un vecchio argomento, ma sì, puoi. :) Tuttavia devi essere loggato. Ad esempio dal terminale ssh. e quindi invoca osascript -e 'display dialog "Hello!"'
Alex Reds

61

Usa questo comando per attivare la notifica del centro notifiche dal terminale.

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

61

Se stai utilizzando una qualsiasi versione di Mac OS X con Centro notifiche, puoi utilizzare la gemma di notifica del terminale . Prima installalo (potrebbe essere necessario sudo):

gem install terminal-notifier

e poi semplicemente:

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

Vedi anche questo post su OS X Daily .


5
Questo è semplicemente molto meglio della vecchia roba di osascript.
Jonny

Questo sembra non funzionare nella 10.7.5 (Lion), apparentemente non ci sono Centro Notifiche.
Norman H

4
brew install terminal-notifierfunziona anche se preferisci preparare.
gklka

5
PSA: su Mavericks e versioni successive non è necessario, basta utilizzare la notifica di visualizzazione di osascript , che è menzionata di seguito nella risposta di Pradeep.
alexchandel

7

Ciò ripristinerebbe il focus sull'applicazione precedente e uscirà dallo script se la risposta era vuota.

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 dicessi agli eventi di sistema di visualizzare la finestra di dialogo, ci sarebbe stato un piccolo ritardo se non fosse stato eseguito prima.

Per la documentazione sulla finestra di dialogo di visualizzazione, apri il dizionario delle aggiunte standard in AppleScript Editor o consulta la Guida del linguaggio AppleScript .


4

Aggiunta di sottotitoli , titolo e suono alla notifica:

Con AppleScript :

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

Con terminal / bash e osascript:

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

È possibile visualizzare un avviso invece di una notifica

Non accetta il sottotitolo né il suono duro.

Con AppleScript :

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

Con terminal / bash e osascript:

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

Aggiungi una linea in bash per riprodurre il suono dopo la linea di avviso:

afplay /System/Library/Sounds/Hero.aiff

Aggiungi la stessa riga in AppleScript , lasciando che lo script di shell faccia il lavoro:

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

Elenco dei suoni integrati di macOS tra cui scegliere qui .

Parafrasato da un pratico articolo sulle notifiche del terminale e di AppleScript .


3

E il mio 15 cent. Una riga per il terminale mac ecc. Basta impostare MIN = su qualunque cosa e un messaggio

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"'

Un esempio bonus per l'ispirazione per combinare più comandi; questo metterà un mac messo in standby anche sul messaggio :) è necessario il login sudo quindi, una moltiplicazione come 60 * 2 per due ore va pure

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


0

Ho creato uno script per risolvere questo problema che è qui . Non hai bisogno di alcun software aggiuntivo per questo. Installazione:
brew install akashaggarwal7/tools/tsay
Utilizzo:
sleep 5; tsay

Sentiti libero di contribuire!


10
"non è necessario alcun software aggiuntivo ... basta installare questo" questo è un software aggiuntivo.
PRS

@PRS è uno script che esegue già i comandi disponibili per macOS, non un software.
Akash Agarwal

2
allora perché devo installare brew e il tuo script? capito quello che intendo? ;)
PRS

comunque ti do credito per avermi introdotto al comando say ... ho imparato qualcosa di nuovo oggi! lol
PRS

@PRS Sono contento che ti sia capitato di dire comando, è abbastanza utile. Riguardo al tuo altro commento, penso che se sei uno sviluppatore è abbastanza comune da usare. E riguardo all'installazione dello script, sentiti libero di aprire il sorgente dello script e copiarlo / incollarlo localmente in un file e chmod + x ed eseguirlo;)
Akash Agarwal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.