Як змусити термінал iTerm повідомити мене про завершення завдання / процесу?


106

Повідомлення центру сповіщень було б ідеальним, але гарчить, док-станція відмов, звук тощо, теж буде добре (або якщо це можна зробити лише в Terminal.app, я б готовий переключитися назад). Чи є опція десь в iTerm, щоб увімкнути сповіщення, чи це щось, що я маю набрати в кінці команди в терміналі? Якщо останнє, чи можна додати попередження після запуску процесу (наприклад, якщо я усвідомлюю, що це займе більше часу, ніж я спочатку очікував, я погано здогадуюсь).

Відповіді:


198

Повідомте про вже запущений процес

Ярлик: Aабо:

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

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

Чому?

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

Вимоги

iTerm: Інтеграція оболонки:

iTerm2 -> Install Shell Integration

Зауважте, що інтеграція не відображатиме сповіщення, доки iTerm2 не буде перезапущено.


11
Після встановлення інтеграції оболонок, можливо, ви захочете перейти до iTerm2 -> Налаштування -> Профілі -> Термінал, прокрутіть вниз та зніміть прапорець "Показати індикатори позначок", мені ця інтеграція оболонки не сподобалась. Ви також можете змінити Редагувати -> Позначення та анотації -> Повідомлення -> Опублікувати повідомлення, якщо ви хочете, щоб оси сповіщення замість спливаючого стилю оповіщення.
Чарльз Л.

@simonhamp Я пропоную використовувати тригери ( iterm2.com/documentation-triggers.html ) для захоплених сеансів
phirschybar

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:
true1ness

частина друга помилки/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.
true1ness

Ви знаходитесь у системі, старшій за Маверикс чи Йосеміті?
Марк Сетчелл

Nope, Yosemite 10.10.3
true1ness

О, це дивно. Чи можете ви спробувати щось простіше на кшталт osascript -e 'display notification "Hello"'- спеціально копіюючи та вставляючи звідси.
Марк Сетчелл

33

І завжди можна використовувати sayкоманду.

Зазвичай , коли ви працюєте тривалий процес всередині терміналу , і хочете , щоб отримати оновлення , ви можете просто використовувати цю команду , щоб говорити такі речі , як doneабо errorабо bazinga.

mvn clean install; say done 

Ця команда створює весняний додаток java, і це займе багато часу, і воно прозвучить 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 ігнорувати рядок, коли я фактично видаю команду і дивлюся лише на рядок echo'd? З файлу довідки я спробував попередньо повторити регекс тригера з \ 0 ("Все значення, збігається з регулярним виразом."), Але він все одно виконує тригер двічі.
true1ness

@ true1ness Будьте креативні, наприклад використовуйте echo "end-of-""my-process" цитати всередині. Він буде відповідати тексту "закінчення мого процесу" лише тоді, коли процес закінчений.
баф

9

Існує інструмент OSS, який називається noti .

Ви можете легко встановити його brew install notiі почати використовувати його, просто додавши команду до notiвподоби noti sleep 3.


3

Ви також можете використовувати, terminal-notifierякі використовують системні сповіщення mac os. Щоб встановити його за допомогою домашнього пива, просто:

$ brew install terminal-notifier

Тоді, якщо ви хочете відобразити сповіщення, коли ваша робота / процес виконано, використовуйте щось подібне

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

І цей дисплей виглядає так:

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

Ви також можете змінити звук та значок сповіщень. Більше інформації в github repo: https://github.com/julienXX/terminal-notifier


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.