Jak utworzyć wyskakujące okienko / alert Mac Terminal? Applescript?

107

Chcę, aby mój program wyświetlał alert, powiadomienie, cokolwiek, co wyświetla mój niestandardowy tekst. Jak to się robi? Czy można również utworzyć jeden z kilkoma przyciskami, które ustawiają zmienną?

Podobne do partii: echo msgbox""<a.vbs&a.vbs

JShoe
źródło

Odpowiedzi:

213

Użyj osascript. Na przykład:

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

Zastąpienie „Findera” dowolną aplikacją. Zwróć uwagę, że jeśli ta aplikacja działa w tle, okno dialogowe pojawi się również w tle. Aby zawsze wyświetlać się na pierwszym planie, użyj jako aplikacji „Zdarzenia systemowe”:

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

Czytaj więcej na Mac OS X wskazówki .

Anne
źródło
Czekaj, możesz skrócić aplikację jako aplikację?
JShoe,
Silnik AppleScript automatycznie go zastąpi. Po prostu wklej linię między cudzysłowami w edytorze AppleScript, po naciśnięciu przycisku Uruchom automatycznie zastępuje aplikację aplikacją przed wykonaniem.
Anne,
Kolejna oszczędność przy pisaniu: nie potrzebujesz „end if”, „end repeat” itp., Po prostu „end” jest w porządku, a AppleScript wstawi drugie słowo.
Nicholas Riley
7
Jeśli nie chcesz przycisku "Anuluj", ale po prostu chcesz, aby przycisk "OK" zamienił {dialog} na {alert}.
Bart B
1
13havik, dobrze wiem, że to stary temat, ale tak, możesz. :) Jednak musisz być zalogowany np. Przez terminal ssh. a następnie wywołaj okno dialogowe osascript -e '"Hello!"'
Alex Reds
61

Użyj tego polecenia, aby wyzwolić powiadomienie centrum powiadomień z terminala.

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'
Pradeep Vairamani
źródło
61

Jeśli używasz dowolnej wersji systemu Mac OS X z Centrum powiadomień, możesz użyć klejnotu terminal-notifier . Najpierw zainstaluj (możesz potrzebować sudo):

gem install terminal-notifier

a potem po prostu:

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

Zobacz także ten post na OS X Daily .

Enrico Carlesso
źródło
5
Jest to po prostu o wiele lepsze niż stare rzeczy z osascriptem.
Jonny
Wygląda na to, że nie działa w 10.7.5 (Lion), najwyraźniej nie ma w nim Centrum powiadomień.
Norman H
4
brew install terminal-notifierdziała również, jeśli wolisz parzyć.
gklka
5
PSA: W przypadku Mavericks i późniejszych nie jest to potrzebne, wystarczy użyć powiadomienia wyświetlania osascript, o którym mowa poniżej w odpowiedzi Pradeepa.
alexchandel
7

Spowoduje to przywrócenie fokusu do poprzedniej aplikacji i zamknięcie skryptu, jeśli odpowiedź była pusta.

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

Jeśli powiesz zdarzeniom systemowym, aby wyświetlić okno dialogowe, wystąpi niewielkie opóźnienie, jeśli wcześniej nie było uruchomione.

Aby uzyskać dokumentację dotyczącą wyświetlania okna dialogowego, otwórz słownik dodatków standardowych w edytorze AppleScript lub zapoznaj się z podręcznikiem języka AppleScript .

Lri
źródło
4

Dodanie podtytułu , tytułu i dźwięku do powiadomienia:

Z AppleScript :

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

Z terminalem / bash i osascript:

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

Alert może być wyświetlana zamiast powiadomienia

Nie ma podtytułu ani dźwięku trudnego.

Z AppleScript :

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

Z terminalem / bash i osascript:

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

Dodaj linię w bash do odtwarzania dźwięku za linią alertu:

afplay /System/Library/Sounds/Hero.aiff

Dodaj tę samą linię w AppleScript , pozwalając skryptowi powłoki wykonać pracę:

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

Lista wbudowanych dźwięków macOS do wyboru tutaj .

Sparafrazowano na podstawie poręcznego artykułu na temat powiadomień terminalowych i skryptów jabłkowych .

andyNilson
źródło
3

I moje 15 centów. Jedna linijka dla terminala mac itp. Po prostu ustaw MIN = na cokolwiek i wiadomość

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

Dodatkowy przykład inspiracji do łączenia większej liczby poleceń; Spowoduje to uśpienie Maca również po wiadomości :) wymagane jest wtedy logowanie sudo, mnożenie jako 60 * 2 przez dwie godziny idzie również

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
źródło
0

Zrobiłem skrypt, aby rozwiązać ten problem, który jest tutaj . Nie potrzebujesz do tego żadnego dodatkowego oprogramowania. Instalacja:
brew install akashaggarwal7/tools/tsay
użycie:
sleep 5; tsay

Zapraszam do udziału!

Akash Agarwal
źródło
10
„nie potrzebuję żadnego dodatkowego oprogramowania… po prostu zainstaluj to” to jest dodatkowe oprogramowanie.
PRS
@PRS to skrypt, który uruchamia polecenia dostępne już dla systemu macOS, a nie oprogramowanie.
Akash Agarwal
2
to po co mam instalować brew i twój skrypt? rozumiesz o co mi chodzi? ;)
PRS
jednak dam ci uznanie za wprowadzenie mnie do polecenia powiedz ... Nauczyłem się dziś czegoś nowego! lol
PRS
@PRS Cieszę się, że natrafiłeś na polecenie powiedz, jest całkiem przydatne. Jeśli chodzi o twój inny komentarz, myślę, że jeśli jesteś deweloperem, jest to dla ciebie dość powszechne. A jeśli chodzi o instalację skryptu, śmiało możesz otworzyć źródło skryptu i skopiować / wkleić je lokalnie do pliku, a następnie chmod + x go i uruchomić;)
Akash Agarwal