Уведомления 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 и более поздние версии имеют собственные уведомления, вот как я могу достичь той же цели с помощью терминала-уведомителя:
- Установить варку
$ brew install terminal-notifier
Добавьте это к
~/.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"
Я просто еще немного покопался и нашел для этого простой метод. Это немного больше руководства, чем мне бы хотелось, но здесь все.
- Установите growlnotify (он находится в папке extras установочной загрузки Growl)1.
- Добавить <
&& 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