Wie mache ich ein Mac Terminal Popup / Alert? Applescript?

106

Ich möchte in der Lage sein, dass mein Programm eine Warnung anzeigt, was auch immer mein benutzerdefinierter Text anzeigt. Wie wird das gemacht? Ist es auch möglich, eine mit mehreren Schaltflächen zu erstellen, mit denen eine Variable festgelegt wird?

Ähnlich wie bei Chargen: echo msgbox""<a.vbs&a.vbs

JShoe
quelle

Antworten:

213

Verwenden Sie osascript. Beispielsweise:

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

Ersetzen Sie "Finder" durch eine beliebige App. Beachten Sie, dass das Dialogfeld auch im Hintergrund angezeigt wird, wenn diese App im Hintergrund ausgeführt wird. Um immer im Vordergrund zu stehen, verwenden Sie "Systemereignisse" als App:

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

Lesen Sie mehr über Mac OS X Hinweise .

Anne
quelle
Warten Sie, Sie können Anwendung als App abkürzen?
JShoe
Die AppleScript-Engine ersetzt sie automatisch. Fügen Sie einfach die Zeile zwischen den Anführungszeichen im AppleScript-Editor ein. Wenn Sie auf Ausführen klicken, wird die App vor der Ausführung automatisch durch die Anwendung ersetzt.
Anne
Ein weiterer Tippschoner: Sie brauchen nicht "end if", "end repeat" usw., nur "end" ist in Ordnung und AppleScript fügt das zweite Wort ein.
Nicholas Riley
7
Wenn Sie nicht die Schaltfläche "Abbrechen", sondern nur die Schaltfläche "OK" möchten, ersetzen Sie {dialog} durch {alert}.
Bart B
1
13havik, nun, ich weiß, es ist ein altes Thema, aber ja, das kannst du. :) Sie müssen jedoch angemeldet sein, zB per Terminal ssh. und dann osascript -e 'Anzeigedialog "Hallo!"' aufrufen
Alex Reds
61

Verwenden Sie diesen Befehl, um die Benachrichtigung des Benachrichtigungscenters vom Terminal aus auszulösen.

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

Wenn Sie eine Mac OS X-Version mit Notification Center verwenden, können Sie das Terminal-Notifier- Juwel verwenden. Installieren Sie es zuerst (möglicherweise benötigen Sie sudo):

gem install terminal-notifier

und dann einfach:

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

Siehe auch diesen OS X Daily-Beitrag .

Enrico Carlesso
quelle
5
Das ist einfach so viel besser als das alte Osascript-Zeug.
Jonny
Dies scheint in 10.7.5 (Lion) nicht zu funktionieren, anscheinend kein Benachrichtigungscenter.
Norman H
4
brew install terminal-notifierfunktioniert auch, wenn Sie lieber brauen.
Gklka
5
PSA: Bei Mavericks und höher wird dies nicht benötigt. Verwenden Sie einfach die Display-Benachrichtigung von osascript , die unten in Pradeeps Antwort erwähnt wird.
Alexchandel
7

Dies würde den Fokus auf die vorherige Anwendung wiederherstellen und das Skript beenden, wenn die Antwort leer wäre.

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

Wenn Sie System Events anweisen, das Dialogfeld anzuzeigen, tritt eine kleine Verzögerung auf, wenn es zuvor nicht ausgeführt wird.

Eine Dokumentation zum Anzeigedialog finden Sie im AppleScript Editor im Wörterbuch der Standarderweiterungen oder im AppleScript Language Guide .

Lri
quelle
4

Hinzufügen von Untertiteln , Titeln und einem Sound zur Benachrichtigung:

Mit AppleScript :

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

Mit Terminal / Bash und osascript:

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

Anstelle einer Benachrichtigung kann eine Warnung angezeigt werden

Nimmt weder die Überschrift noch den Klang hart.

Mit AppleScript :

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

Mit Terminal / Bash und osascript:

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

Fügen Sie eine Zeile in Bash hinzu, um den Sound nach der Alarmzeile abzuspielen:

afplay /System/Library/Sounds/Hero.aiff

Fügen Sie dieselbe Zeile in AppleScript hinzu , damit das Shell-Skript die Arbeit erledigt :

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

Liste der in macOS integrierten Sounds zur Auswahl .

Paraphrasiert aus einem praktischen Artikel über Terminal- und Applescript-Benachrichtigungen .

andyNilson
quelle
3

Und meine 15 Cent. Ein Einzeiler für das Mac-Terminal usw. setzt einfach MIN = auf was auch immer und eine Nachricht

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

Ein Bonusbeispiel für Inspiration, um mehr Befehle zu kombinieren. Dadurch wird auch ein Mac in den Standby-Modus versetzt :) Die Sudo-Anmeldung wird dann benötigt, eine Multiplikation, da die 60 * 2 für zwei Stunden ebenfalls gilt

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
quelle
0

Ich habe ein Skript , dieses Problem zu lösen , das ist hier . Sie benötigen hierfür keine zusätzliche Software. Installation:
brew install akashaggarwal7/tools/tsay
Verwendung:
sleep 5; tsay

Fühlen Sie sich frei, einen Beitrag zu leisten!

Akash Agarwal
quelle
9
"Benötigen Sie keine zusätzliche Software ... installieren Sie diese einfach", das ist zusätzliche Software.
PRS
@PRS ist ein Skript, das Befehle ausführt, die dem macOS bereits zur Verfügung stehen, keine Software.
Akash Agarwal
2
Warum muss ich dann Brew und Ihr Skript installieren? verstehst du, was ich meine? ;)
PRS
Ich gebe Ihnen jedoch Anerkennung dafür, dass Sie mir den Befehl say vorgestellt haben ... Ich habe heute etwas Neues gelernt! lol
PRS
@PRS Ich bin froh, dass du auf say command gestoßen bist, es ist ziemlich nützlich. Über Ihren anderen Kommentar denke ich, wenn Sie ein Entwickler-Gebräu sind, ist es ziemlich üblich, dass Sie es verwenden. Und um das Skript zu installieren, können Sie die Quelle des Skripts öffnen und lokal in eine Datei kopieren / einfügen und chmod + x und ausführen;)
Akash Agarwal