Как сделать всплывающее окно / предупреждение в терминале Mac? Яблоко?

107

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

Подобно партии: echo msgbox""<a.vbs&a.vbs

JShoe
источник

Ответы:

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 подсказки .

Энн
источник
Подождите, вы можете сократить приложение до приложения?
JShoe
Движок AppleScript автоматически заменит его. Просто вставьте строку между кавычками в редакторе AppleScript, когда вы нажмете «Выполнить», приложение автоматически заменяется приложением перед выполнением.
Anne
Еще одна заставка при вводе: вам не нужны «конец, если», «конец повторения» и т. Д., Достаточно просто «конец», и AppleScript вставит второе слово.
Николас Райли
7
Если вам не нужна кнопка «Отмена», а просто нужна кнопка «ОК», замените {dialog} на {alert}.
Bart B
1
13havik, ну я знаю это старая тема, но да, можно. :) Однако вам необходимо войти в систему. Например, через терминал ssh. а затем вызвать osascript -e 'отобразить диалоговое окно «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 02
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 .

Lri
источник
4

Добавление субтитров , заголовка и звука к уведомлению:

С AppleScript :

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

С терминалом / 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."

С терминалом / 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

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

Акаш Агарвал
источник
10
«не нужно никакого дополнительного программного обеспечения ... просто установите это», это дополнительное программное обеспечение.
PRS
@PRS - это сценарий, который запускает команды, уже доступные для macOS, а не программное обеспечение.
Акаш Агарвал
2
тогда зачем мне устанавливать brew и ваш скрипт? понимаете, что я имею в виду? ;)
PRS
однако я благодарю вас за то, что вы познакомили меня с командой say ... Сегодня я узнал кое-что новое! lol
PRS
@PRS Рад, что вы встретили команду say, она весьма полезна. Что касается вашего другого комментария, я думаю, что если вы разработчик, то вам довольно часто пользоваться пивом. А что касается установки скрипта, не стесняйтесь открывать исходный код скрипта и копировать / вставлять его локально в файл, chmod + x и запускать;)
Акаш Агарвал