Уведомления Growl для завершения задачи оболочки

(OSX Specific)

Я, как и многие другие, кроме меня, часто начинаю процесс в оболочке, который занимает минуту или две, чтобы завершиться (например, большой коммит svn). В течение этого времени я часто alt-tab и обновляю reddit/slashdot/wikipedia/ что угодно. Было бы замечательно настроить что-то, что будет публиковать уведомление о рычании, когда процесс оболочки завершится.

В моем идеальном мире это работало бы так: "Если процесс только что вышел из вкладки, открытой в Терминале, отправьте уведомление о рычании".

У кого-нибудь еще есть что-то подобное?

8 ответов

Вы можете установить growlnotify, чтобы сделать это.

$ ./some_program && growlnotify Title -m Message

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


Чтобы упростить использование growlnotify для вашего варианта использования, отредактируйте ~/bash_profile и добавьте следующее:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

теперь вы можете просто long your_command (похожий на sudo). Ctrl-A позиционирует курсор в начале строки, если вы (как и я) всегда сначала набираете фактическую команду, а потом должны добавить префикс.

К сожалению, моего bash-fu недостаточно для добавления команды в growlnotify сообщение


за комментарий @ mankoff к этому ответу:

Вы можете просто напечатать во время выполнения команды, она будет выполнена позже. Я создал для меня следующую функцию:

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

Использовать как gn svn,

Изменение ответа Даниэля Бека, если вы сделаете это небольшое изменение, сделает его очень приятным.

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

Затем, когда вы запустите 'long svn up', вы увидите сообщение 'svn up complete'.

Очень хорошо, если вы запускаете много трудоемких сценариев оболочки одновременно.

Теперь, когда OSX 10.8 и более поздние версии имеют собственные уведомления, вот как я могу достичь той же цели с помощью терминала-уведомителя:

  1. Установить варку
  2. $ brew install terminal-notifier
  3. Добавьте это к ~/.bash_profile:

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }
    

Убедитесь, что вы поставили свой профиль с . ~/.bash_profile (необязательно для будущих сеансов терминала), поскольку ваш профиль создается автоматически при создании сеанса.

Проверьте с вашей любимой командой, а затем вызов функции.

ls ; gn

Аргументы для терминала-уведомителя могут немного улучшиться, но быстрая попытка получить предыдущую команду для передачи функции не удалась, и это дает мне всю необходимую функциональность. А именно добавление ;gn получить уведомление в конце любого длительного процесса.

Что вам нужно growlnotify которая является программой CLI для запуска уведомлений о рычании. Вы можете использовать его как:

./script.sh;; growlnotify -m "done"

У него есть еще несколько ручек, с которыми вы можете играть, используйте growlnotify -h для получения дополнительной информации

Это способ его автоматического вызова для "долго выполняющихся" процессов: http://hints.macworld.com/article.php?story=20071009124425468

Он цепляется за $PROMPT_COMMAND и уведомляет о завершении процессов, занимающих более 10 секунд. Возможно, вам придется настроить его в соответствии с вашей собственной средой и рабочим процессом (например, игнорируя завершение less или вызов редактора), но он, кажется, работает достаточно хорошо из коробки.

Используйте Growlnotify.

ls && growlnotify -H localhost -m "message"

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

  1. Установите growlnotify (он находится в папке extras установочной загрузки Growl)1.
  2. Добавить < && growlnotify -m "Message"> Для длительного процесса.

Это работает для меня прямо сейчас, но я мог бы сделать лучше, я думаю.

Решение OSX 10.9+ без стороннего программного обеспечения:

В OSX 10.9 и выше вы можете использовать команду AppleScript display notification чтобы отобразить рычание из терминала, вот так:

osascript -e 'display notification with title "Process Completed."'

Если вы не хотите вводить все это каждый раз, вы можете использовать alias:

alias growl='osascript -e "display notification with title \"Process Completed.\""'

Пример:

long-running-script.sh; growl
Другие вопросы по тегам