Як зробити спливаюче вікно / сповіщення Mac Terminal? Яблукопис?


107

Я хочу, щоб у моїй програмі було відображено попередження, сповіщення про те, що відображає мій власний текст. Як це робиться? Також, чи можна зробити одну з декількох кнопок, яка встановлює змінну?

Схожий на batch's: echo msgbox""<a.vbs&a.vbs

Відповіді:


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, коли ви натискаєте Виконати, він замінює додаток автоматично на додаток перед виконанням.
Енн

Ще одна заставка набору тексту: вам не потрібно "закінчити, якщо", "закінчити повторення" тощо, просто "кінець" добре, і AppleScript вставить друге слово.
Ніколас Райлі

7
Якщо ви не хочете, щоб кнопку «Скасувати», а просто хочете, щоб кнопку «ОК» замінили {діалог} на {сигнал}.
Барт Б

1
13havik, добре, я знаю, це стара тема, але так, можна. :) Однак вам потрібно увійти в систему. Наприклад, терміналом ssh. а потім попросити osascript -e 'відобразити діалогове вікно "Привіт!"'
Алекс Редс

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
Це просто набагато краще, ніж старі речі із сценарію.
Jonny

Схоже, це не працює в 10.7.5 (Лев), мабуть, у ньому немає Центру сповіщень.
Норман Н

4
brew install terminal-notifierтакож працює, якщо ви віддаєте перевагу варити.
гклка

5
PSA: У Mavericks і пізніших випадках це не потрібно, просто використовуйте сповіщення на дисплеї osascript , яке згадується нижче у відповіді Pradeep.
алекшандель

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"

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


0

Я створив сценарій, щоб вирішити це, що тут . Для цього вам не потрібно додаткового програмного забезпечення. Установка:
brew install akashaggarwal7/tools/tsay
Використання:
sleep 5; tsay

Не соромтеся робити внесок!


9
"не потрібно додаткового програмного забезпечення ... просто встановіть це", це додаткове програмне забезпечення.
PRS

@PRS - це сценарій, який вже виконує команди, доступні для macOS, а не програмне забезпечення.
Акаш Агарвал

2
то чому я повинен встановити пивоварню та ваш сценарій? бачите, що я маю на увазі? ;)
PRS

однак я вам вдячний за те, що ви познайомили мене з командою say ... Я сьогодні дізнався щось нове! lol
PRS

@PRS Радий, що ти натрапив на команду сказати, що її дуже корисна. Щодо Вашого іншого коментаря, я думаю, що якщо ви розробник, заварка для вас досить поширена. А щодо встановлення скрипту, сміливо відкривайте джерело сценарію та скопіюйте / вставте його локально у файл та chmod + x і запустіть його;)
Akash Agarwal,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.