如何使Mac Terminal弹出/提醒?Applescript?


107

我希望能够使我的程序显示警报,通知,无论显示我的自定义文本的内容如何。怎么做?另外,是否可以用几个按钮设置变量?

与批处理类似: echo msgbox""<a.vbs&a.vbs

Answers:


213

使用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提示的更多信息


等待,您可以将应用程序缩写为app吗?
JShoe 2011年

AppleScript引擎将自动替换它。只需在AppleScript编辑器中的引号之间粘贴一行,当您单击“运行”时,它将在执行前自动将应用替换为应用。
安妮(Anne)

另一个键入保护程序:您不需要“如果结束”,“重复结束”等,只需“结束”就可以了,AppleScript会插入第二个单词。
Nicholas Riley

7
如果您不想使用“取消”按钮,而只想要“确定”按钮,请用{alert}替换{dialog}。
Bart B

1
13havik,我知道这是个老话题了,但是可以。:)但是,您需要登录。例如,通过终端ssh。然后调用osascript -e'显示对话框“ Hello!”'
Alex Reds


61

如果使用的是具有通知中心的任何Mac OS X版本,则可以使用终端通知程序 gem。首先安装它(您可能需要sudo):

gem install terminal-notifier

然后简单地:

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

另请参阅此OS X Daily帖子


5
这完全比旧的osascript更好。
Jonny 2012年

这在10.7.5(Lion)中似乎不起作用,显然其中没有Notification Center。
诺曼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"

使用终端/ bashosascript

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

使用终端/ bashosascript

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

在添加一行bash的用于播放声音的警戒线后:

afplay /System/Library/Sounds/Hero.aiff

AppleScript中添加同一行,让shell脚本执行工作:

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

内置声音的macOS列表可从此处选择

摘自关于终端和Applescript通知的便利文章。


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


0

我编写了一个脚本来解决这个问题。您不需要任何其他软件。安装方式:
brew install akashaggarwal7/tools/tsay
用法:
sleep 5; tsay

随时贡献!


9
“不需要任何额外的软件...只需安装此软件”即多余的软件。
PRS

@PRS是一个脚本,该脚本运行的是macOS已经可用的命令,而不是软件。
Akash Agarwal

2
那为什么我必须安装brew和您的脚本?明白了吗?;)
PRS

但是,我为您介绍了say命令给您带来了荣誉...我今天学到了一些新东西!大声笑
-PRS

@PRS很高兴您遇到了说命令,它非常有用。关于您的其他评论,我认为如果您是开发者,则很常见。关于安装脚本,随时可以打开脚本的源代码,并将其复制/粘贴到本地文件中,然后chmod + x并运行它;)
Akash Agarwal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.