ฉันจะสร้างป๊อปอัป / แจ้งเตือน Mac Terminal ได้อย่างไร แอปเปิ้ลสคริป?


108

ฉันต้องการให้โปรแกรมของฉันแสดงการแจ้งเตือนสังเกตสิ่งที่แสดงข้อความที่กำหนดเองของฉัน วิธีนี้ทำได้อย่างไร? นอกจากนี้เป็นไปได้หรือไม่ที่จะทำให้ปุ่มหลายปุ่มตั้งค่าตัวแปร?

คล้ายกับแบทช์: echo msgbox""<a.vbs&a.vbs

คำตอบ:


215

ใช้osascript. ตัวอย่างเช่น:

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

การเปลี่ยน“ Finder” ด้วยแอพอะไรก็ได้ที่คุณต้องการ โปรดทราบว่าแอปนั้นเป็นพื้นหลังหรือไม่กล่องโต้ตอบจะปรากฏในพื้นหลังด้วย หากต้องการแสดงเบื้องหน้าเสมอให้ใช้ "เหตุการณ์ของระบบ" เป็นแอป:

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

อ่านเพิ่มเติมเกี่ยวกับMac OS X คำแนะนำ


เดี๋ยวก่อนคุณสามารถย่อ application เป็น app?
JShoe

เอ็นจิ้น AppleScript จะแทนที่โดยอัตโนมัติ เพียงแค่วางบรรทัดระหว่างเครื่องหมายคำพูดใน AppleScript Editor เมื่อคุณกดเรียกใช้แอปจะแทนที่แอปโดยอัตโนมัติด้วยแอปพลิเคชันก่อนดำเนินการ
แอน

โปรแกรมประหยัดการพิมพ์อื่น: คุณไม่จำเป็นต้อง "end if", "end repeat" ฯลฯ เพียงแค่ "end" ก็ใช้ได้แล้ว AppleScript จะแทรกคำที่สอง
Nicholas Riley

7
หากคุณไม่ต้องการปุ่ม "ยกเลิก" แต่ต้องการให้ปุ่ม "ตกลง" แทนที่ {โต้ตอบ} ด้วย {alert}
Bart B

1
13havik ฉันรู้ว่ามันเป็นหัวข้อเก่า แต่ใช่คุณทำได้ :) อย่างไรก็ตามคุณต้องเข้าสู่ระบบเช่นโดยเทอร์มินัล ssh แล้วเรียกใช้ osascript -e 'display dialog "Hello!"'
Alex Reds

61

ใช้คำสั่งนี้เพื่อทริกเกอร์การแจ้งเตือนของศูนย์การแจ้งเตือนจากเทอร์มินัล

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

61

หากคุณใช้ Mac OS X เวอร์ชันใดก็ตามที่มีศูนย์การแจ้งเตือนคุณสามารถใช้อัญมณีการแจ้งเตือนเทอร์มินัลได้ ก่อนติดตั้ง (คุณอาจต้องsudo):

gem install terminal-notifier

จากนั้นก็:

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

ดูโพสต์ OS X Dailyนี้ด้วย


5
สิ่งนี้ดีกว่า osascript แบบเก่ามาก
จอนนี่

ดูเหมือนว่าจะใช้ไม่ได้ใน 10.7.5 (Lion) ดูเหมือนจะไม่มีศูนย์การแจ้งเตือนอยู่ในนั้น
Norman H

4
brew install terminal-notifierยังใช้งานได้หากคุณต้องการชง
gklka

5
PSA:ใน Mavericks และหลังจากนั้นไม่จำเป็นเพียงแค่ใช้การแจ้งเตือนการแสดงผลของ osascript ซึ่งระบุไว้ด้านล่างในคำตอบของ Pradeep
alexchandel

7

สิ่งนี้จะคืนค่าโฟกัสไปยังแอปพลิเคชันก่อนหน้าและออกจากสคริปต์หากคำตอบว่างเปล่า

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

หากคุณบอกให้เหตุการณ์ของระบบแสดงกล่องโต้ตอบจะมีความล่าช้าเล็กน้อยหากไม่ได้ทำงานมาก่อน

สำหรับเอกสารเกี่ยวกับการโต้ตอบแสดงเปิดพจนานุกรมเพิ่มมาตรฐานใน AppleScript แก้ไขหรือดูคู่มือภาษา AppleScript


4

เพิ่มคำบรรยาย , ชื่อและเสียงเพื่อแจ้งเตือน:

ด้วยAppleScript :

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

ด้วยTerminal / bashและosascript:

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

แจ้งเตือนสามารถแสดงแทนการแจ้งเตือน

ไม่ใช้หัวข้อย่อยหรือเสียงที่ยาก

ด้วยAppleScript :

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

ด้วยTerminal / bashและosascript:

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

เพิ่มบรรทัดในbashเพื่อเล่นเสียงหลังจากบรรทัดแจ้งเตือน:

afplay /System/Library/Sounds/Hero.aiff

เพิ่มบรรทัดเดียวกันในAppleScriptเพื่อให้เชลล์สคริปต์ทำงาน:

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

รายการของ MacOS สร้างขึ้นในเสียงที่จะเลือกจากที่นี่

ถอดความมาจากบทความที่มีประโยชน์เกี่ยวกับการแจ้งเตือนเทอร์มินัลและแอปเปิ้ลสคริป


3

และ 15 เซ็นต์ของฉัน ซับหนึ่งสำหรับเทอร์มินัล mac ฯลฯ เพียงแค่ตั้งค่า MIN = เป็นอะไรก็ได้และข้อความ

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

ตัวอย่างโบนัสสำหรับแรงบันดาลใจในการรวมคำสั่งเพิ่มเติม สิ่งนี้จะทำให้ mac เข้าสู่โหมดสลีปบายบนข้อความด้วย :) จำเป็นต้องเข้าสู่ระบบ sudo จากนั้นการคูณเป็น 60 * 2 เป็นเวลาสองชั่วโมงก็ผ่านไปเช่นกัน

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

1

คำถามและคำตอบแบบจำลองมีอยู่ที่: /superuser/246353/how-to-make-the-terminal-do-a-pop-up-alert-in-osx


ชื่อเรื่องเหมือนกันใช่ แต่คนละคำถาม ฉันต้องการสร้างหน้าต่างที่ต้องใช้การโต้ตอบกับผู้ใช้ (กดปุ่ม) เพื่อปิด
JShoe

0

ฉันทำสคริปต์เพื่อแก้ปัญหานี้ซึ่งเป็นที่นี่ คุณไม่จำเป็นต้องมีซอฟต์แวร์เพิ่มเติมสำหรับสิ่งนี้ การติดตั้ง:
brew install akashaggarwal7/tools/tsay
การใช้งาน:
sleep 5; tsay

อย่าลังเลที่จะมีส่วนร่วม!


11
"ไม่ต้องการซอฟต์แวร์เพิ่มเติม ... เพียงแค่ติดตั้ง" ซึ่งเป็นซอฟต์แวร์เสริม
PRS

@PRS เป็นสคริปต์ที่รันคำสั่งที่มีให้ใน macOS อยู่แล้วไม่ใช่ซอฟต์แวร์
Akash Agarwal

2
แล้วทำไมฉันต้องติดตั้ง brew และสคริปต์ของคุณ? ดูว่าฉันหมายถึงอะไร? ;)
PRS

อย่างไรก็ตามฉันจะให้เครดิตคุณในการแนะนำคำสั่ง say ... วันนี้ฉันได้เรียนรู้สิ่งใหม่ ๆ ! lol
PRS

@PRS ดีใจที่คุณเจอคำสั่ง say มันมีประโยชน์มาก เกี่ยวกับความคิดเห็นอื่น ๆ ของคุณฉันคิดว่าถ้าคุณเป็นนักพัฒนาเบียร์เป็นเรื่องธรรมดาที่คุณจะใช้ และเกี่ยวกับการติดตั้งสคริปต์อย่าลังเลที่จะเปิดซอร์สของสคริปต์และคัดลอก / วางลงในไฟล์และ chmod + x และเรียกใช้;)
Akash Agarwal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.