Как сделать всплывающее/оповещение о Mac-терминале? Applescript?

Я хочу, чтобы моя программа отображала предупреждение, уведомление, независимо от того, что отображает мой пользовательский текст. Как это делается? Кроме того, можно ли сделать один с несколькими кнопками, которые задают переменную?

Аналогично пакету: echo msgbox""<a.vbs&a.vbs

Ответ 1

Используйте 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.

Ответ 2

Если вы используете версию Mac OS X с центром уведомлений, вы можете использовать terminal-notifier gem. Сначала установите его (вам может понадобиться sudo):

gem install terminal-notifier

а затем просто:

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

См. также этот пост OS X Daily.

Ответ 3

Используйте эту команду для запуска уведомления центра уведомлений с терминала.

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

Ответ 4

Это позволит восстановить фокус на предыдущем приложении и выйти из script, если ответ был пуст.

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.

Ответ 5

И мои 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 login необходим, тогда умножение как 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

Ответ 7

Я создал script, чтобы решить эту проблему, здесь. Для этого вам не нужно дополнительное программное обеспечение. Установка:
brew install akashaggarwal7/tools/tsay
Использование:
sleep 5; tsay

Не стесняйтесь вносить свой вклад!