12

(OSX Specific)

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

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

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

8 ответов8

11

Вы можете установить 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 .

2

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

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

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

2

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

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

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

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

2

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

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

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

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

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

ls ; gn

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

1

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

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

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

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

0

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

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

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

0

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

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

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

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

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

Пример:

long-running-script.sh; growl

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .