Как получить уведомление, когда мои команды выполнены

Я запускаю ряд команд в командной строке, для завершения которых требуется около двадцати минут. Я бы хотел увидеть какое-то уведомление на моем Mac, когда они закончены, поэтому мне не нужно контролировать терминал, когда он заканчивается. Есть ли способ сделать это?

$ svn update . && ant clean build start && *notify_me_somehow*

Edit

Я мог бы использовать xclock, но это похоже на взломать. В идеале я мог бы отправлять уведомление в любом месте, например, на моем телефоне, экране и т. Д.

52 голоса | спросил Amir Afghani 2 MarpmWed, 02 Mar 2011 20:25:23 +03002011-03-02T20:25:23+03:0008 2011, 20:25:23

13 ответов


54

(svn update . && ant clean build start && say done) || say error

ответил Eugene Bujak 2 MarpmWed, 02 Mar 2011 23:38:45 +03002011-03-02T23:38:45+03:0011 2011, 23:38:45
45

В Mac OS 10.8 вы можете отправлять сообщения Notification Center (похожие на Growl, но встроенные в Mac OS). Проверьте это страница , чтобы узнать, как установить Ruby gem, который позволит вам отправлять уведомления из командной строки. Чтобы упростить обычную процедуру просто заботы о факте чего-либо в выполняемом терминале, добавьте псевдоним в ваш .bash_profile, например.

alias notifyDone='terminal-notifier -title "Terminal" -message "Done with task!"'

Тогда вы можете просто сделать

$ <long-running task> ; notifyDone

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

Всплывающее окно уведомления>> </p></body></html>

ответил Tom Crockett 19 MaramTue, 19 Mar 2013 04:41:45 +04002013-03-19T04:41:45+04:0004 2013, 04:41:45
20

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

В файле .dmg найдите дополнительные функции, есть двоичный файл growlnotify. Установите его, что-то вроде /usr/local/bin. Затем вы можете использовать эту команду

growlnotify --sticky --appIcon <icon> --message <message> -t <title>

, чтобы показать всплывающее окно, например:

growl

ответил Loïc Wolff 2 MarpmWed, 02 Mar 2011 21:15:30 +03002011-03-02T21:15:30+03:0009 2011, 21:15:30
16

Как и в Mac OS X Lion 10.7, в терминале есть несколько новых индикаторов состояния, которые могут помочь в таких проблемах:

В закладках:

  • Активность: индикатор активности (индикатор хода хода) отображается, когда на терминал выводится последний вывод. Это позволяет вам увидеть, занят ли он в данный момент или завершил длительный процесс. (Или, конечно, вы можете использовать его, чтобы сказать, когда он начал производить вывод после тихого выполнения работы некоторое время.)

  • Непрочитано: отображается эллипс «â € |», чтобы указать новый, непрочитанный текст в фоновых вкладках. Когда вы выбираете вкладку, индикатор очищается.

  • Предупреждение: отображается «звонок», указывающий, когда BEL был записан на фоновые вкладки или фоновые окна. Кроме того, терминал отображает красный значок на значке приложения, указывая количество «непрочитанных» предупреждений /колоколов на всех терминалах. Если сам терминал находится в фоновом режиме, он также отскакивает значок своего док-станции при воспроизведении колокола.

В свернутом окне значки док-станции:

  • Активность: активность отображается путем отображения имени процесса переднего плана.

  • Непрочитано: непрочитанный текст обозначается эллипсисом.

  • Минимизированные окна терминала отображают содержимое в реальном времени в значках Dock. Это можно использовать, чтобы увидеть, есть ли активность или даже определить, что делает терминал, если нужный результат можно идентифицировать (например, «верхний» дисплей довольно легко распознать даже при небольших размерах). Это особенно полезно, когда включено увеличение док-станции или у вас есть место для большой док-станции.

Кроме того, вы можете отобразить что-то в терминале, чтобы привлечь ваше внимание (что было бы видно даже в минимизированных окнах). Например:

  • Отобразите большую звездочку: banner \*

  • Инвертируйте отображение: printf '\e[?5h'

  • Нарисуйте дисплей красным: tput setab 1; tput clear

  • Сидите в цикле, мигая на экране: while true; do printf '\e[?5h'; sleep 1; printf '\e[?5l'; sleep 1; done

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

printf '\e[9;1t'

См. «Обработка окна» на странице http://invisible-island.net/xterm/ctlseqs/ctlseqs.html для получения более подробной информации.

Другой подход - использовать AppleScript для отображения предупреждения в отдельном окне:

osascript -e 'tell app "System Events" to display alert "Build Completed" message "The checkout and build have completed."'
ответил Chris Page 18 AM00000070000004031 2011, 07:13:40
11

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

http://i.stack.imgur.com/FaZmF.png

Как заметил Крис, Лев добавил небольшие значки уведомлений, когда БЕЛ брошен. Вы можете бросить это самостоятельно с помощью команды:

tput bel

Итак, если вы выполняете некоторую работу в фоновом режиме и хотите получать уведомление, когда оно заканчивается, вы можете попробовать что-то вроде:

ping -c 5 www.google.com && tput bel &

Это запускает команду ping в качестве фоновой задачи (она висит & выполняет это), и она бросает простое предупреждение, когда оно заканчивается. Исторически BEL использовался для создания этого [ужасного] аппаратного сигнала, однако Лев со вкусом заменил его звуковым эффектом «неправильной команды», значком уведомлений и значком терминала, который дважды прыгал в док-станции.

ответил Austin Lucas 17 J000000Tuesday12 2012, 10:19:45
4

Вы также можете использовать команду build in say для уведомления, например: say «ant: build: done». Смотрите: человек говорит в терминале.

ответил mst 2 MarpmWed, 02 Mar 2011 23:12:12 +03002011-03-02T23:12:12+03:0011 2011, 23:12:12
4

Я представляю в этом ответе две вещи:

  • Возможность использования afplay, который воспроизводит звуковые файлы , для уведомления.
  • мои инструменты для отчета о состоянии выхода вместе с уведомлением.

У меня есть этот скрипт, ~/bin/donebeep:

#!/bin/bash
if [ "[email protected]" = 0 ]; then
  afplay -v 2 /System/Library/Sounds/Blow.aiff &
else
  afplay -v 2 /System/Library/Sounds/Sosumi.aiff &
fi

Звучит разный звук в зависимости от того, является ли аргумент равным 0. Тогда у меня есть псевдоним:

alias donebeep='(savestatus=$?; ~/bin/donebeep $savestatus "[email protected]"; exit $savestatus)'

(То, что у них одно и то же имя, не имеет значения и, вероятно, плохая идея.)

Чтобы использовать его в вашем примере, svn update . && ant clean build start; donebeep. Обратите внимание, что я использую ;, а не &&, чтобы он мог уведомить меня об отказе и успехе.

До Я узнал о afplay , вместо этого я использовал say, чтобы говорить сообщения. Роль donebeep сыграл этот скрипт:

#!/bin/bash
say -v Bruce "Done $(basename "$(pwd)"), [email protected]" &

Этот скрипт говорит непосредственно о коде выхода вместо двух разных сообщений. Он также упоминает имя текущего каталога (чтобы помочь уточнить, какая задача выполнена), и ему может быть предоставлен дополнительный текст, передающий параметры псевдониму (поэтому псевдоним имеет "[email protected]" в этом). Обратите внимание на завершающий &, чтобы вам не нужно дождаться окончания речи, прежде чем получать приглашение.


справочная страница для afplay является неполным; afplay -h перечисляет все параметры:

Usage:
afplay [option...] audio_file

Options: (may appear before or after arguments)
  {-v | --volume} VOLUME
    set the volume for playback of the file
  {-h | --help}
    print help
  { --leaks}
    run leaks analysis  {-t | --time} TIME
    play for TIME seconds
  {-r | --rate} RATE
    play at playback rate
  {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
  {-d | --debug}
    debug print output
ответил Kevin Reid 19 AM00000030000003131 2011, 03:41:31
3

Я создаю простой инструмент, который делает именно это. https://github.com/vikfroberg/brb

Установка

Необходимо установить Node.js: http://nodejs.org

$ npm install -g brb

Инструкция

$ sleep 3; brb
ответил Viktor Fröberg 8 J0000006Europe/Moscow 2014, 14:40:25
1

Я написал ntfy для этой цели. Это кросс-платформенный и может автоматически отправлять уведомления, когда заканчиваются длинные команды.

Если у вас есть Python pip (у большинства дистрибутивов Linux и MacOS есть), вот как установить его и включить автоматические уведомления:

$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell

Проверьте это на http://ntfy.rtfd.io

В дополнение к этому он также может:

  • подавлять автоматические уведомления, когда терминал находится на переднем плане (X11, iTerm2 и Terminal.app поддерживаются и включаются по умолчанию)
  • отправлять уведомления на основе облачных вычислений (Pushover, Pushbullet и XMPP).
  • используется для отправки уведомлений при завершении процесса (а не в вышеупомянутой автоматической поддержке)
  • вручную отправлять уведомления (хорошо для использования в скриптах!)
ответил Daniel Schep 19 Maypm16 2016, 18:46:59
0

Ubuntu отправляет следующий псевдоним в ~ /.bashrc:

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

С помощью этого вы можете делать такие вещи, как:

make; alert
sleep 10; alert

Возможно, есть эквивалент notify-send в Mac OSX? Я видел похожие всплывающие окна как в Mac, так и в Ubuntu.

ответил Dustin Kirkland 17 FebruaryEurope/MoscowbFri, 17 Feb 2012 10:32:27 +0400000000amFri, 17 Feb 2012 10:32:27 +040012 2012, 10:32:27
0

Моя проблема со звуками и модальными окнами заключается в том, что я не могу сказать, откуда они. В настоящее время я работаю с кучей пробелов, а иногда и из 20 окон терминала.

Мое решение переносимо на сторону unix и должно работать со всем, что поддерживает ansi escape-последовательности. Это решение работает со Snow Leopard и, вероятно, будет работать с более древними версиями терминала.

Одиночная строка в .bash_profile

function watch { $* ; echo -n -e "\033[41m" ;  echo $* DONE ;  date ;  echo -n -e "\033[0m" ; }

Нарушение этого:

$* expands to the original command I want to watch.
first escape sequence changes background color to red
echo repeats the command (with red background, the word DONE.
Running Date tells you when it finished.
last escape resets the terminal to what it was.

Если вам не нравится красный цвет, google ascii escape code background color. Обратите внимание, что это не изменяет весь экран красным цветом, а просто выводит результат после завершения команды.

ответил Sherwood Botsford 23 MaramSat, 23 Mar 2013 11:19:16 +04002013-03-23T11:19:16+04:0011 2013, 11:19:16
0

Я создал сценарий для решения этой проблемы, здесь . Для этого вам не нужно дополнительное программное обеспечение. Установка:
brew install akashaggarwal7/tools/tsay
Использование:
sleep 5; tsay

Не стесняйтесь вносить свой вклад!

ответил Akash Agarwal 15 +03002016-10-15T18:03:08+03:00312016bEurope/MoscowSat, 15 Oct 2016 18:03:08 +0300 2016, 18:03:08
0

Вот моя функция bash (просто поместите ее где-нибудь в свой ~/.bashrc или ~/.zshrc:

watch(){
  [email protected] # Somehow interpolate [email protected] directly doesn't work.
  [email protected] && say 'Watch Completed!' && osascript -e "display notification \"Completed: $cmd\" with title \"Watch Alert\""
}

Чтобы использовать его: watch echo 'hi there'

Вы также можете настроить звук уведомления, как описано здесь: https://apple.stackexchange.com/a/115373/9622

ответил randomor 6 AM00000070000004931 2017, 07:30:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132