Как я могу вызвать уведомление Центра уведомлений из сценария AppleScript или оболочки?

Мне бы хотелось воспользоваться возможностями Центра уведомлений 10.8 в AppleScripts и сценариях оболочки, которые я пишу.

Есть ли встроенная команда или сторонняя библиотека, которую я могу использовать из сценария AppleScript или оболочки?

В идеале можно управлять типом и значком уведомления, но даже возможность запуска базового знака с значком запаса (но настраиваемый текст) будет оценена.

268 голосов | спросил Nathan Greenstein 25 J000000Wednesday12 2012, 22:57:06

11 ответов


364

С Mavericks и позже вы можете сделать это, используя Apple Display 'display notification':

display notification "Lorem ipsum dolor sit amet" with title "Title"

                            Â

Это так просто! Нет 3 rd -партийных библиотек или приложений, необходимых и полностью переносимых для использования в других системах. 10.9 уведомление сверху, 10.10 DP в середине, 10.10 внизу.

AppleScript может быть запущен из оболочки с помощью /usr /bin /osascript:

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

Вы также можете настроить оповещение, добавив файл

  • субтитр

    Добавить субтитры, за которыми следует строка или переменная, содержащая субтитры.

    display notification "message" with title "title" subtitle "subtitle"
    

    В приведенном выше примере выдается следующее уведомление:

  • звук

    Добавить «звуковое имя», за которым следует имя звука, который будет воспроизводиться вместе с уведомлением.

    display notification "message" sound name "Sound Name"
    

    Допустимые имена звуков - это названия звуков, расположенных в папке

    • ~/Library/Sounds
    • /System/Library/Sounds

Отправка уведомлений может быть завершена как сценарий командной строки. Следующий код может быть запущен в терминале и добавит скрипт в /usr /local /bin (должен существовать, добавить в $ PATH), который называется notify.

cd /usr/local/bin && echo -e "#!/bin/bash\n/usr/bin/osascript -e \"display notification \\\"\$*\\\"\"" > notify && chmod +x notify;cd -

Это сценарий, который выше будет добавлен для уведомления.

#!/bin/bash
/usr/bin/osascript -e "display notification \"$*\""

Теперь, чтобы отобразить уведомление:

 notify Lorem ipsum dolor sit amet
sleep 5; notify Slow command finished
ответил grg 29 SunEurope/Moscow2013-12-29T17:46:10+04:00Europe/Moscow12bEurope/MoscowSun, 29 Dec 2013 17:46:10 +0400 2013, 17:46:10
81

опознаватель терминала

Из README:

  

terminal-notifier - это инструмент командной строки для отправки пользователям Mac OS X   Уведомления, которые доступны в Mac OS X 10.8.

     

В настоящее время он упакован как пакет приложений, потому что   NSUserNotification не работает с помощью инструмента «Основы».   радар: //11956694

     

Этот инструмент будет использоваться Kicker для   показать статус команд, которые выполняются из-за файловой системы   изменения. (V3.0.0)

     

Скачать

     

Предварительно созданные двоичные файлы, которые являются кодовыми и готовы к использованию, являются   из загрузок   раздел .

     

Использование

     

$ ./terminal-notifier.app/Contents/MacOS/terminal-notifier group-ID sender-name message [bundle-ID]

     

Чтобы использовать терминал-уведомитель, вы должны вызвать двоичный код    внутри пакета приложений.

     

В первом аргументе указано, что «группа» принадлежит уведомлению.   Для любой группы - только уведомление всегда будет отображаться, заменяя   ранее опубликованные уведомления. Примерами являются: идентификатор процесса отправителя   для охвата уведомлений с помощью уникального процесса или текущего рабочего   каталог для уведомлений о масштабах по проекту.

     

Второй и третий аргументы описывают само уведомление и   являются его «титулом» и «сообщением» соответственно. Например, для   сообщать отправителю уведомление пользователю, вы можете   укажите имя отправителя как название.

     

Четвертый и последний аргументы являются необязательными. В нем указывается, какие   приложение должно быть активировано, когда пользователь нажимает уведомление.   По умолчанию это активирует Terminal.app, чтобы запустить другой   вместо этого укажите идентификатор пакета приложения. Для   Например, для запуска Safari.app используйте: com.apple.Safari.

ответил Steve Moser 26 J000000Thursday12 2012, 00:19:48
20

Теперь вы можете сделать это с помощью Growl2 ( из App Store ). Установите Growl и включите «Уведомления OS X» (снимок экрана)

введите описание изображения здесь

Кроме того, вам необходимо установить GrowlNotify для инструмента командной строки для отправки уведомлений Growl. Вы можете скачать этот инструмент бесплатно на странице Загрузить .

Теперь вы можете генерировать уведомления Growl из командной строки, которые будут отправлены в Центр уведомлений. Например:

growlnotify -n "My App" -m "Hello world"

введите описание изображения здесь>> </p>

<p> Обратите внимание, что в настоящее время не представляется возможным изменить значок приложения. </p></body></html>

ответил Gerry 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 20 Sep 2012 17:25:15 +0400 2012, 17:25:15
20

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

Сравнение

Я нашел решение для вас:

Фактически он контролировался настройкой в ​​System Preference, а не некоторым параметром в написанном скрипте. Эти два изображения должны объяснить все это

Спасибо @grgarside за отличный ответ.

Системное предпочтение

ответил Vic Jang 7 62015vEurope/Moscow11bEurope/MoscowSat, 07 Nov 2015 03:36:44 +0300 2015, 03:36:44
12

Недавно я разблокировал терминал-уведомитель, чтобы создать инструмент командной строки для отображения уведомлений о предупреждениях (с действиями) и оповещений типа ответа.

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

https://github.com/vjeantet/alerter

 введите описание изображения здесь>> </a> </p></body></html>

ответил vjeantet 24 ThuEurope/Moscow2015-12-24T18:29:53+03:00Europe/Moscow12bEurope/MoscowThu, 24 Dec 2015 18:29:53 +0300 2015, 18:29:53
10

Поскольку Growl не является бесплатным, а терминальный уведомитель недоступен в системах до 10.8, я предпочитаю использовать cocoaDialog . Это бесплатный и открытый исходный код, поэтому вы, вероятно, также можете распространять вместе со своими скриптами.

Если вам не нужна большая настройка, вы также можете использовать уведомление AppleScript display notification, которое вы также можете вызвать из оболочки, как уже упоминалось ранее.

Но будьте осторожны, что AppleScript, похоже, требует двойных кавычек. Поэтому, если вам нужны переменные, этот не будет работать :

osascript -e "display notification '$text' with title '$title'" #WRONG

Вам придется использовать скрытые двойные кавычки. Это уродливое , но работает :

osascript -e "display notification \"$text\" with title \"$title\""
ответил mivk 21 Jpm1000000pmMon, 21 Jan 2013 13:59:16 +040013 2013, 13:59:16
6

Вот классный, который я использую в ruby-скрипте на OS X (чтобы я мог запустить скрипт и получить обновление даже после перехода от окна):

cmd = %Q|osascript -e 'display notification "Server was reset" with title "Posted Update"'|
system ( cmd )
ответил JayCrossler 15 +04002014-10-15T00:13:00+04:00312014bEurope/MoscowWed, 15 Oct 2014 00:13:00 +0400 2014, 00:13:00
4

Официальная документация

https://developer.apple.com /library/content/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/DisplayNotifications.html

Копирование текста здесь, если документ перемещен или удален.

  

Чтобы отобразить уведомление, предоставьте команде уведомления дисплея строку, которая будет отображаться. При желании укажите значения параметров заголовка, субтитров и звуковых названий, чтобы предоставить дополнительную информацию и звуковое оповещение при появлении уведомления

display notification "All graphics have been converted." with title "My Graphic Processing Script" subtitle "Processing is complete." sound name "Frog"
     

Примечание

     

После использования сценария для отображения уведомления сценарий или редактор сценариев (если скрипт запускается из редактора сценариев) добавляется в список уведомлений приложений в системных настройках> Уведомления. Там вы можете настроить такие параметры, как отображение уведомлений в виде предупреждений или баннеров.

     

При нажатии кнопки «Показать» в уведомлении в стиле оповещения открывается приложение, отображающее уведомление. Для приложения сценария действие открытия приложения снова запускает обработчик запуска скрипта, что потенциально может привести к тому, что скрипт начнет обрабатывать второй раз. Имейте это в виду и добавьте код в свой скрипт, чтобы справиться с этим сценарием, если это необходимо.

ответил nishanths 1 Jam1000000amMon, 01 Jan 2018 09:05:13 +030018 2018, 09:05:13
3

(Это альтернативная реализация, основанная на превосходном ответе @ grgarside.)

AppleScript может быть интерпретирован напрямую, помещая osascript в строку shebang.

#!/usr/bin/osascript

on run argv
    if length of argv = 1 then
        display notification (item 1 of argv) with title "Notification"
    else if length of argv > 1 then
        display notification (item 1 of argv) with title (item 2 of argv)
    else
        return "<message> is required\nUsage: notify <message> [<title>]"
    end if
end run

Сохраните это как notify где-то в вашем пути, например, /usr/local/bin/notify, и сделайте его исполняемым (chmod +x notify). Он принимает сообщение и необязательный заголовок. Если либо есть пробел, заключите его в кавычки, чтобы оболочка интерпретировала его как один аргумент.

$ notify "Lorem ipsum dolor sit amet" "Testing Notifications"
ответил Steve 1 FriEurope/Moscow2017-12-01T01:27:58+03:00Europe/Moscow12bEurope/MoscowFri, 01 Dec 2017 01:27:58 +0300 2017, 01:27:58
2

Альтернатива:

В .bash_profile:

function _sys_notify() {
    local notification_command="display notification \"$2\" with title \"$1\""
    osascript -e "$notification_command"
}
alias sys-notify="_sys_notify $1 $2"

Использовать команду: sys-notify "title" "message"

ответил ronald8192 24 +03002017-10-24T11:47:08+03:00312017bEurope/MoscowTue, 24 Oct 2017 11:47:08 +0300 2017, 11:47:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132