Làm cách nào để tạo cửa sổ bật lên / cảnh báo Mac Terminal? Applescript?


107

Tôi muốn chương trình của mình hiển thị cảnh báo, thông báo, bất cứ thứ gì hiển thị văn bản tùy chỉnh của tôi. Làm thế nào là điều này được thực hiện? Ngoài ra, có thể tạo một với nhiều nút đặt một biến không?

Tương tự như batch's: echo msgbox""<a.vbs&a.vbs

Câu trả lời:


213

Sử dụng osascript. Ví dụ:

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

Thay thế “Finder” bằng bất kỳ ứng dụng nào bạn muốn. Lưu ý rằng nếu ứng dụng đó ở chế độ nền, hộp thoại cũng sẽ xuất hiện trong nền. Để luôn hiển thị ở nền trước, hãy sử dụng “Sự kiện hệ thống” làm ứng dụng:

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

Đọc thêm về Mac OS X Gợi ý .


Chờ đã, bạn có thể viết tắt ứng dụng là ứng dụng?
JShoe

Công cụ AppleScript sẽ tự động thay thế nó. Chỉ cần dán dòng giữa các dấu ngoặc kép trong AppleScript Editor, khi bạn nhấn Run, nó sẽ tự động thay thế ứng dụng bằng ứng dụng trước khi thực thi.
Anne

Một trình tiết kiệm gõ khác: bạn không cần "kết thúc nếu", "kết thúc lặp lại", v.v., chỉ cần "kết thúc" là được và AppleScript sẽ chèn từ thứ hai.
Nicholas Riley

7
Nếu bạn không muốn nút "Hủy" mà chỉ muốn nút "OK", hãy thay thế {hộp thoại} bằng {alert}.
Bart B

1
13havik, tôi biết đó là chủ đề cũ, nhưng có, bạn có thể. :) Tuy nhiên bạn cần phải đăng nhập. Ví dụ: bằng terminal ssh. và sau đó gọi hộp thoại hiển thị osascript -e '"Xin chào!"'
Alex Reds

61

Sử dụng lệnh này để kích hoạt thông báo trung tâm thông báo từ thiết bị đầu cuối.

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

61

Nếu bạn đang sử dụng bất kỳ phiên bản Mac OS X nào có Trung tâm thông báo, bạn có thể sử dụng đá quý trình thông báo đầu cuối . Trước tiên hãy cài đặt nó (bạn có thể cần sudo):

gem install terminal-notifier

và sau đó chỉ cần:

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

Xem thêm bài đăng hàng ngày OS X này .


5
Điều này chỉ đơn giản là tốt hơn rất nhiều so với công cụ osascript cũ.
Jonny

Điều này dường như không hoạt động trong 10.7.5 (Lion), dường như không có Trung tâm thông báo trong đó.
Norman H

4
brew install terminal-notifiercũng hoạt động nếu bạn thích pha.
gklka

5
PSA: Trên Mavericks và sau này, điều này không cần thiết, chỉ cần sử dụng thông báo hiển thị của osascript , được đề cập bên dưới trong câu trả lời của Pradeep.
alexchandel

7

Thao tác này sẽ khôi phục tiêu điểm cho ứng dụng trước đó và thoát khỏi tập lệnh nếu câu trả lời trống.

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

Nếu bạn yêu cầu Sự kiện Hệ thống hiển thị hộp thoại, sẽ có một khoảng thời gian nhỏ nếu nó không chạy trước đó.

Để có tài liệu về hộp thoại hiển thị, hãy mở từ điển Bổ sung Chuẩn trong AppleScript Editor hoặc xem Hướng dẫn Ngôn ngữ AppleScript .


4

Thêm phụ đề , tiêu đềâm thanh vào thông báo:

Với AppleScript :

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

Với terminal / bashosascript:

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

Một cảnh báo có thể được hiển thị thay vì một thông báo

Không lấy tiêu đề phụ cũng như âm thanh khó nghe.

Với AppleScript :

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

Với terminal / bashosascript:

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

Thêm một dòng trong bash để phát âm thanh sau dòng cảnh báo:

afplay /System/Library/Sounds/Hero.aiff

Thêm cùng một dòng trong AppleScript , cho phép shell script thực hiện công việc:

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

Danh sách các âm thanh tích hợp sẵn của macOS để lựa chọn tại đây .

Được diễn giải từ một bài viết hữu ích về thông báo terminal và applecript .


3

Và 15 xu của tôi. Một lớp lót cho thiết bị đầu cuối mac, v.v. chỉ cần đặt MIN = thành bất kỳ thứ gì và một thông báo

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

Một ví dụ bổ sung cho cảm hứng để kết hợp nhiều lệnh hơn; điều này cũng sẽ khiến máy mac chuyển sang chế độ chờ khi có tin nhắn :) sau đó cần đăng nhập sudo, một phép nhân như 60 * 2 trong hai giờ cũng được

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

Tôi đã tạo một kịch bản để giải quyết vấn đề này ở đây . Bạn không cần bất kỳ phần mềm bổ sung nào cho việc này. Cài đặt:
brew install akashaggarwal7/tools/tsay
Cách sử dụng:
sleep 5; tsay

Hãy đóng góp!


9
"không cần bất kỳ phần mềm bổ sung nào ... chỉ cần cài đặt cái này" đó là phần mềm bổ sung.
PRS

@PRS là một tập lệnh chạy các lệnh có sẵn cho macOS, không phải một phần mềm.
Akash Agarwal

2
vậy tại sao tôi phải cài đặt brew và script của bạn? hiểu ý tôi chứ? ;)
PRS

tuy nhiên, tôi sẽ ghi công cho bạn vì đã giới thiệu cho tôi lệnh say ... Hôm nay tôi đã học được một điều mới! cười lớn
PRS

@PRS Rất vui vì bạn đã xem lệnh say, nó khá hữu ích. Về nhận xét khác của bạn, tôi nghĩ nếu bạn là nhà phát triển thì việc sử dụng bia khá phổ biến đối với bạn. Và về việc cài đặt kịch bản, cũng cảm thấy tự do để mở nguồn của kịch bản và sao chép / dán nó cục bộ trong một tập tin và chmod + x nó và chạy nó;)
Akash Agarwal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.