В месте, где я работаю, есть команды, выполнение которых занимает много времени.
Есть ли команда / утилита, которую я могу использовать, чтобы уведомить меня об окончании выполнения команды? Это может быть всплывающее окно или небольшой звук.
В месте, где я работаю, есть команды, выполнение которых занимает много времени.
Есть ли команда / утилита, которую я могу использовать, чтобы уведомить меня об окончании выполнения команды? Это может быть всплывающее окно или небольшой звук.
Ответы:
Как правило, если вы знаете это до запуска команды, вы можете просто запустить ее с:
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 и GNOME , есть система уведомлений, с которой вы можете запускать notify-send
(часть libnotify
).
notify-send "Job finished!"
KDE использует kdialog
, например:
kdialog --passivepopup 'Job finished'
(command; command-after) &
?
В Unix-подобных системах вы можете позвонить в звуковой звонок:
echo -e "\a"
tput bel
Я создал простой инструмент для MacOS X, который делает именно это. https://github.com/vikfroberg/brb
Монтаж
$ npm install -g brb
инструкции
$ sleep 3; brb
Для получения звукового уведомления вы можете использовать spd-say "Some text"
. Пример:
some-command; spd-say "Yo"
sudo apt-get install speech-dispatcher
. Или используйте альтернативы askubuntu.com/questions/501910/…
Я только начал использовать notifu для настольных уведомлений от Cygwin. Это приложение уведомлений командной строки для Windows.
Пример:
ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
Я написал ntfy
именно для этой цели. Он кроссплатформенный и может автоматически отправлять уведомления по окончании длительных команд.
Если у вас есть Python pip
(в большинстве дистрибутивов Linux и MacOS он есть), вот как его установить и включить автоматические уведомления:
$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell
Проверьте это на http://ntfy.rtfd.io
В дополнение к этому, он также может:
Для 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/
надеюсь, это помогло!
Если вы используете 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
.
Это, вероятно, не соответствует вашим требованиям, поскольку все, что он делает, это печатает сообщение; Я не думаю, что он может быть настроен для всплывающего окна или звонка.
На системах с 'awk' попробуйте
awk 'BEGIN{ print "\a" }'
был единственным, кто работал на меня.
\a
( ответ trinth в ).
Если вы используете, npm
то Node-Notifier предоставляет кроссплатформенное решение .
notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "
Жаль, что я не заметил эту тему лет назад. Мое решение было практически таким же, как у 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 для помещения сообщения в строку заголовка окна, из которого оно было выполнено. Мне иногда бывает удобно видеть, из какого окна пришло сообщение.
Так что это происходит довольно поздно, но я начал использовать систему для этого: у меня есть скрипт 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
n bundle install
n npm install
Другая возможность заключается в использовании alert
, работает на Linux.
>any-command; alert
Выдает уведомление как на картинке. оповещение
Я сделал приложение, которое отправит уведомление на ваш телефон Android, когда процесс завершится, чтобы вам не пришлось привязываться к компьютеру.
Установите, затем добавьте ;notifier.sh
в конец вашей команды.
Например, если ваша команда была make install
, вы бы сделали свою команду:
make install; notifier.sh
fg;say "Job finished"
это сработает. Но ... есть ли способ, которым это может быть дополнительно автоматизировано - т.е. позвонить в звонок или уведомить после завершения любой работы, которая занимает больше порога, например, минуту? Существует ли переменная оболочки, например, в bash, по истечении времени последней команды?