В месте, где я работаю, есть команды, выполнение которых занимает много времени.
Есть ли команда / утилита, которую я могу использовать, чтобы уведомить меня об окончании выполнения команды? Это может быть всплывающее окно или небольшой звук.
В месте, где я работаю, есть команды, выполнение которых занимает много времени.
Есть ли команда / утилита, которую я могу использовать, чтобы уведомить меня об окончании выполнения команды? Это может быть всплывающее окно или небольшой звук.
Как правило, если вы знаете это до запуска команды, вы можете просто запустить ее с:
command; command-after &
Это выполнит command-after
того, как вышла предыдущая команда (независимо от ее кода выхода). &
Запустит его в фоновом режиме.
Если вы заботитесь об успешном или неудачном завершении, соответственно используйте:
command && command-after-only-if-success &
command || command-after-only-if-fail &
Если команда уже запущена, вы можете использовать управление заданиями, чтобы приостановить ее, а затем вернуть ее на передний план с fg
цепочке с вашим уведомлением:
command
# enter Ctrl-z
fg ; command-after
Теперь ... что вы хотите сделать после этого, зависит от вашей среды.
В любой системе вы можете "позвонить" в терминал звонка. Зависит от вашей конкретной системы, что действительно работает (BSD против GNU Linux и т.д.), Но tput bel
должен это сделать. Я не мог надежно проверить это прямо сейчас, хотя. Ищите "звонок", чтобы узнать больше.
В Mac OS X вы можете использовать AppleScript, чтобы открыть диалоговое окно Finder:
osascript -e 'tell Application "Finder" to display dialog "Job finished" '
Вы могли бы это сказать что-то для вас:
say "Job finished"
Или вы можете использовать систему уведомлений Mountain Lion:
sudo gem install terminal-notifier # <= only need to do this once
terminal-notifier -message "Job finished!" -title "Info"
В GNOME zenity
может отображать диалоговое окно GTK, вызываемое из командной строки. См. Также этот вопрос переполнения стека: отображение окна сообщения из сценария bash в linux. Его можно установить через ваш любимый менеджер пакетов.
zenity --info --text="Job finished"
Некоторые дистрибутивы могут иметь xmessage
. Специально для сред GTK есть gxmessage
.
В Ubuntu есть система уведомлений, которую вы можете вызвать с помощью notify-send
.
notify-send "Job finished!"
KDE использует kdialog
, например:
kdialog --passivepopup 'Job finished'
В Unix-подобных системах вы можете позвонить в звуковой звонок:
echo -e "\a"
Я создал простой инструмент для MacOS X, который делает именно это. https://github.com/vikfroberg/brb
Монтаж
$ npm install -g brb
инструкции
$ sleep 3; brb
Для получения звукового уведомления вы можете использовать spd-say "Some text"
. Пример:
some-command; spd-say "Yo"
Я только начал использовать notifu для настольных уведомлений от Cygwin. Это приложение уведомлений командной строки для Windows.
Пример:
ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
В Linux есть изящная хитрость, которая делает это автоматически без необходимости каждый раз вводить команду для уведомления.
Сначала установите автоключ. Это помогает определить действия для различных нажатий клавиш.
sudo apt-get install autokey-gtk
Теперь определите новую фразу в autokey и назначьте горячую клавишу как Alt+Enter. Добавьте эту фразу:
; notify-send "Job finished!" &
#
Обратите внимание, что новая строка после первой строки важна.
Также добавьте оконный фильтр. Я использую гуаке и терминал. Включите любой другой терминал, который вы используете.
.*(guake)|(Terminal).*
Вы сделали !!
Теперь каждый раз, когда вам нужно получать уведомления о команде, запускайте ее, используя Alt+Enter вместо Enter/Return.
Источник: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html
Хотя другие ответы уже охватывали большинство способов получения уведомлений о выполненной работе, я хочу дать свои два цента, поскольку вы задали свой вопрос в следующем формате:
В месте, где я работаю, есть команды, выполнение которых занимает много времени.
У меня та же проблема. Иногда что-то может длиться 15 минут.
У меня есть следующая функция в моем .bashrc:
# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
curl -s -F "token=PUSHOVER_TOKEN" \
-F "user=PUSHOVER_USER" \
-F "title=terminal" \
-F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}
Это использует приложение Pushover для отправки уведомления на мой телефон. Таким образом, я могу пойти на обед или принять участие в собрании и получать уведомления о вакансиях, которые я начал на своем компьютере, прежде чем уйти.
Я использую это следующим образом:
command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("
Таким образом, если команда возвращает правильный код завершения, будет выполнено первое нажатие. В случае ошибки будет выполнен второй.
Ofc вам нужно создать пользователя на Pushover и зарегистрировать приложение для отправки уведомлений с https://pushover.net/
надеюсь, это помогло!
Я написал ntfy
именно для этой цели. Он кроссплатформенный и может автоматически отправлять уведомления по окончании длительных команд.
Если у вас есть pip
Питона (большинство дистрибутивов и MacOS Linux есть), вот как установить и настроить автоматические уведомления:
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
Проверьте это на http://ntfy.rtfd.io
В дополнение к этому, он также может:
Так что это происходит довольно поздно, но я начал использовать систему для этого: у меня есть скрипт bash, который выполняет любую команду, переданную ему впоследствии
http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/
#!/bin/bash
# file location : /usr/bin/n
set +e
# $@ executes whatever command is typed after the filename
$@
notify-send "Task Completed"
а потом я просто добавляю
n bundle install
n npm install
Если вы используете csh или tcsh в качестве интерактивной оболочки, вы можете использовать команду notify
:
% long-running-command &
[1] 14431
% notify %1
%
(later, when the command finishes)
[1] Done long-running-command
Вы можете добиться аналогичного эффекта в bash с помощью set -b
или set -o notify
.
Это, вероятно, не соответствует вашим требованиям, поскольку все, что он делает, это печатает сообщение; Я не думаю, что он может быть настроен для всплывающего окна или звонка.
Жаль, что я не заметил эту тему лет назад. Мое решение было практически таким же, как у slhck, но я написал сценарий. Я пользуюсь этим все время. Публиковать здесь, чтобы поделиться им.
#!/bin/bash
msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi
echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
unset WINDOWID
exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
if ! $quiet; then say "done" &; fi
osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
echo $msg
fi
Небольшое объяснение: строка "\x1b]0;$msg\a"
является escape-последовательностью ANSI для помещения сообщения в строку заголовка окна, из которого оно было выполнено. Иногда мне бывает удобно видеть, из какого окна пришло сообщение.
На системах с 'awk' попробуйте
awk 'BEGIN{ print "\a" }'
был единственным, кто работал на меня.
Если вы используете npm
то узел-уведомитель предоставляет кроссплатформенное решение.
notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "
Я создал приложение, которое отправит уведомление на ваш телефон Android, когда процесс завершится, чтобы вам не пришлось привязываться к компьютеру.
Установите, затем добавьте ;notifier.sh
в конец вашей команды.
Например, если ваша команда была make install
, вы должны сделать свою команду:
make install; notifier.sh
Другая возможность заключается в использовании alert
, работает на Linux.
>any-command; alert
Выдает уведомление как на картинке. оповещение