Bagaimana cara membuat peringatan / pop-up Terminal Mac? Applescript?

107

Saya ingin agar program saya menampilkan peringatan, pemberitahuan, apa pun yang menampilkan teks kustom saya. Bagaimana ini dilakukan? Juga, apakah mungkin membuat satu dengan beberapa tombol yang menetapkan variabel?

Mirip dengan batch's: echo msgbox""<a.vbs&a.vbs

JShoe
sumber

Jawaban:

213

Gunakan osascript. Sebagai contoh:

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

Mengganti "Finder" dengan aplikasi apa pun yang Anda inginkan. Perhatikan jika aplikasi itu di-background, dialog akan muncul di latar belakang juga. Untuk selalu ditampilkan di latar depan, gunakan "Peristiwa Sistem" sebagai aplikasi:

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

Baca lebih lanjut tentang Petunjuk Mac OS X .

Anne
sumber
Tunggu, Anda bisa menyingkat aplikasi sebagai aplikasi?
JShoe
Mesin AppleScript secara otomatis akan menggantikannya. Cukup tempelkan garis di antara tanda kutip di AppleScript Editor, saat Anda menekan Run, itu menggantikan aplikasi secara otomatis dengan aplikasi sebelum eksekusi.
Anne
Penghemat pengetikan lainnya: Anda tidak perlu "end if", "end repeat", dll., Cukup "end" saja dan AppleScript akan memasukkan kata kedua.
Nicholas Riley
7
Jika Anda tidak ingin tombol "Batal" tetapi hanya ingin tombol "OK", ganti {dialog} dengan {alert}.
Bart B
1
13havik, saya tahu itu topik lama, tapi ya, Anda bisa. :) Bagaimanapun Anda harus login. Misal dengan terminal ssh. dan kemudian aktifkan osascript -e 'dialog tampilan "Halo!"'
Alex Reds
61

Gunakan perintah ini untuk memicu notifikasi pusat notifikasi dari terminal.

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

Jika Anda menggunakan versi Mac OS X yang memiliki Pusat Pemberitahuan, Anda dapat menggunakan permata terminal-notifier . Instal pertama (Anda mungkin perlu sudo):

gem install terminal-notifier

lalu cukup:

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

Lihat juga posting Harian OS X ini .

Enrico Carlesso
sumber
5
Ini jauh lebih baik daripada osascript lama.
Jonny
Ini tampaknya tidak berfungsi di 10.7.5 (Lion), tampaknya tidak ada Pusat Pemberitahuan di dalamnya.
Norman H
4
brew install terminal-notifierjuga berfungsi jika Anda lebih suka menyeduh.
gklka
5
PSA: Di Mavericks dan yang lebih baru ini tidak diperlukan, cukup gunakan notifikasi tampilan osascript , yang disebutkan di bawah ini dalam jawaban Pradeep.
alexchandel
7

Ini akan mengembalikan fokus ke aplikasi sebelumnya dan keluar dari skrip jika jawabannya kosong.

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

Jika Anda memberi tahu Peristiwa Sistem untuk menampilkan dialog, akan ada sedikit penundaan jika tidak berjalan sebelumnya.

Untuk dokumentasi tentang dialog tampilan, buka kamus Standard Additions di AppleScript Editor atau lihat Panduan Bahasa AppleScript .

Lri
sumber
4

Menambahkan subtitle , judul dan suara ke notifikasi:

Dengan AppleScript :

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

Dengan terminal / bash dan osascript:

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

Sebuah peringatan dapat ditampilkan bukannya pemberitahuan

Tidak mengambil sub-judul atau terdengar keras.

Dengan AppleScript :

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

Dengan terminal / bash dan osascript:

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

Tambahkan baris di bash untuk memutar suara setelah baris peringatan:

afplay /System/Library/Sounds/Hero.aiff

Tambahkan baris yang sama di AppleScript , biarkan skrip shell melakukan pekerjaan:

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

Daftar suara bawaan macOS untuk dipilih dari sini .

Diparafrasekan dari artikel praktis tentang pemberitahuan terminal dan applescript .

andyNilson
sumber
3

Dan 15 sen saya. Satu liner untuk terminal mac dll cukup setel MIN = ke apapun dan pesan

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

Contoh bonus untuk inspirasi untuk menggabungkan lebih banyak perintah; ini akan membuat mac menjadi siaga setelah pesan juga :) login sudo diperlukan kemudian, perkalian sebagai 60 * 2 selama dua jam juga berjalan

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

Saya membuat skrip untuk menyelesaikan ini yang ada di sini . Anda tidak memerlukan perangkat lunak tambahan untuk ini. Instalasi:
brew install akashaggarwal7/tools/tsay
Penggunaan:
sleep 5; tsay

Jangan ragu untuk berkontribusi!

Akash Agarwal
sumber
10
"tidak memerlukan perangkat lunak tambahan ... cukup instal ini" itu perangkat lunak tambahan.
PRS
@PRS adalah skrip yang menjalankan perintah yang sudah tersedia untuk macOS, bukan perangkat lunak.
Akash Agarwal
2
lalu kenapa saya harus install brew dan script anda? lihat apa yang saya maksud ;)
PRS
namun saya akan menghargai Anda karena telah memperkenalkan saya pada perintah katakan ... Saya belajar sesuatu yang baru hari ini! lol
PRS
@PRS Senang Anda menemukan perintah say, ini cukup berguna. Tentang komentar Anda yang lain, saya pikir jika Anda seorang pengembang minuman cukup umum untuk Anda gunakan. Dan tentang menginstal skrip, jangan ragu untuk membuka sumber skrip dan menyalin / menempelkannya secara lokal dalam file dan chmod + x dan menjalankannya;)
Akash Agarwal