Как заставить терминал iTerm уведомлять меня о завершении работы / процесса?

109

Уведомление центра уведомлений было бы идеальным, но рычание, отскок док-станции, звук и т. Д. Тоже подойдут (или, если это можно сделать только в Terminal.app, я бы хотел переключиться обратно). Есть ли где-нибудь в iTerm возможность включить уведомления или это то, что я должен вводить в конце команды в терминале? Если последнее, можно ли добавить предупреждение после запуска процесса (например, если я понимаю, что это займет больше времени, чем я изначально ожидал, я плохо догадываюсь).

правда
источник

Ответы:

205

Уведомлять об уже запущенном процессе

Ярлык: Aили:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

Жуткий глаз!: iTermбудет буквально следить (в правом верхнем углу) за вашим терминалом. Как только команда будет завершена, она свяжется с Notification Center.

Зачем?

Мы уже запустили команду. Мы недооценили время, необходимое для завершения, мы не хотим его отменять и отказываемся сесть и посмотреть его. например через brew updateдолгое время!

Требования

iTerm: Интеграция с оболочкой:

iTerm2 -> Install Shell Integration

Обратите внимание, что интеграция не будет отображать уведомления, пока iTerm2 не будет перезапущен.

Пасхалис
источник
13
После установки интеграции с оболочкой вы, возможно, захотите перейти в iTerm2 -> Настройки -> Профили -> Терминал, прокрутите вниз и снимите флажок «Показать индикаторы отметок», мне не понравилась эта интеграция с оболочкой. Вы также можете выбрать «Правка» -> «Метки и аннотации» -> «Оповещения» -> «Опубликовать уведомление», если вы хотите, чтобы уведомления ОС вместо всплывающего окна в стиле оповещения.
Чарльз Л.
@simonhamp Я предлагаю использовать триггеры ( iterm2.com/documentation-triggers.html ) для
скрытых
3
@dwanderson У вас когда-нибудь это работало с tmux? Это было бы так полезно,
Лукас,
@Lucas в документации есть строка, в которой говорится, что интеграция оболочки не работает с tmux или экраном iterm2.com/documentation-shell-integration.html
Rich Stone
2
Этот глаз меня пугает !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Вы можете добавить любое из следующих значений после любой команды с точкой с запятой между командой и ней:

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

или, если вам нравится Центр уведомлений

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

Вы также можете создать псевдоним в своем профиле notifyи добавить его в конце вашей команды. Итак, в вашем профиле входа

alias notify="tput bel"

затем

sleep 10; notify

Или, если вы запустили свою команду, а она «зависает», просто введите notifyи нажмите, Enterи ваш notifyпсевдоним будет запущен в конце, когда команда завершится, например

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Марк Сетчелл
источник
Хм, с помощью этой команды osascript -e 'display notification "Task finished" with title "Terminal"'я, кажется, получаю эту ошибку2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
правда 1
часть вторая ошибки/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
истинность
Вы используете систему старше Mavericks или Yosemite?
Марк Сетчелл
Нет, Йосемити 10.10.3
истинность
О, это странно. Можете ли вы попробовать что-нибудь попроще osascript -e 'display notification "Hello"'- специально скопировав и вставив отсюда.
Марк Сетчелл
33

И вы всегда можете использовать sayкоманду.

Обычно, когда вы запускаете длительный процесс внутри терминала и хотите получить обновления, вы можете просто использовать эту команду, чтобы озвучивать такие вещи, как doneили errorили bazinga.

mvn clean install; say done 

Эта команда создает приложение java spring и занимает много времени, и она будет говорить doneпосле завершения процесса.

Фархан Салам
источник
16

iTerm2поддерживает Growlуведомления. Вы можете включить его в настройках каждого профиля.

Выберите профиль в Preferences…-> Profiles. Затем во Terminalвкладке есть опция Enable Growl Notifications.

Не забудьте также включить iTermуведомления в Growlнастройках.

Если вы хотите получать уведомление о данном процессе, вы можете попробовать поэкспериментировать Triggers. Вы определяете триггеры вAdvanced вкладке в настройках профиля. Таким образом, вы можете назначить уведомление Growl конкретному результату вашего процесса (regexp).

Например, вы можете:

$ mycommand; echo "end-of-my-process"

И подключите триггер к сообщению "конец моего процесса".

Обновить

Узнайте больше о триггерах на iTerm2.com .

баф
источник
Итак, я прав, что нет глобального способа получить предупреждение для любого завершенного процесса, потому что мне нужно запустить сценарий один раз, чтобы узнать, что он пишет в конце процесса (и мне нужно создавать один для каждого сценария, который я запускаю. )? Например, последняя строка для процесса youtube-dl [download] 100% of 40.13MiB in 00:13повторяется для каждого файла, который он завершает. Что бы я вставил в строку «конец моего процесса»? Могу ли я сделать триггер, когда ~ >снова появится приглашение оболочки по умолчанию ?
true1ness
@ true1ness Я не думаю, что есть общий способ узнать о завершенном процессе. iTermотправляет уведомления о новом выводе терминала, об окончании вывода терминала. Это может работать для некоторых процессов. Я предложил способ работы для всех процессов. Сообщение "конец моего процесса" может быть любой уникальной строкой. Уникально это так, что он не будет распечатан вашим процессом. Может быть буквально "конец моего процесса". Вы должны ввести точно такую ​​же строку в определение триггера и прикрепить к нему уведомление. Я не знаю, будет ли он работать с приглашением оболочки. Вы должны попробовать это сами.
baf
Ах, я неправильно понял, теперь я понял. Мне удалось получить всплывающее предупреждение с выводом эха «конец моего процесса». Однако я также получаю предупреждение, когда действительно запускаю команду echo перед запуском процесса. Как я могу сказать iTerm игнорировать строку, когда я на самом деле запускаю команду и смотрю только на эхо-строку? Из файла справки я попытался добавить к регулярному выражению триггера \ 0 («Все значение, совпадающее с регулярным выражением»), но он все равно запускает триггер дважды.
true1ness
@ true1ness Будьте изобретательны, например, используйте echo "end-of-""my-process" кавычки внутри. Он будет соответствовать тексту «конец моего процесса» только после завершения процесса.
baf
9

Существует инструмент OSS под названием noti .

Вы можете легко установить его brew install notiи начать использовать, просто добавив в свою команду префикса notilike noti sleep 3.

junjian.xu
источник
3

Вы также можете использовать terminal-notifierсистемные уведомления Mac OS. Чтобы установить его через Home brew, просто:

$ brew install terminal-notifier

Затем, если вы хотите отображать уведомление, когда ваша работа / процесс завершен, используйте что-то вроде этого

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

А этот дисплей такой:

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

Вы также можете изменить звук и значок уведомлений. Дополнительная информация в репозитории github: https://github.com/julienXX/terminal-notifier

MaSza
источник
1

Установите интеграцию оболочки iTerm2

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

Выполните свою команду и объедините приложение внимания, например

./task && ~/.iterm2/it2attention once

Это приведет к тому, что приложение iTerm откажется от своего значка после завершения задания.

У вас также есть другие варианты внимания:

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
Леонардо
источник