84

В месте, где я работаю, есть команды, выполнение которых занимает много времени.

Есть ли команда / утилита, которую я могу использовать, чтобы уведомить меня об окончании выполнения команды? Это может быть всплывающее окно или небольшой звук.

15 ответов15

114

Как правило, если вы знаете это до запуска команды, вы можете просто запустить ее с:

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'
    
19

В Unix-подобных системах вы можете позвонить в звуковой звонок:

echo -e "\a"
8

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

Монтаж

$ npm install -g brb

инструкции

$ sleep 3; brb
4

Для получения звукового уведомления вы можете использовать spd-say "Some text" . Пример:

some-command; spd-say "Yo"
4

Я только начал использовать notifu для настольных уведомлений от Cygwin. Это приложение уведомлений командной строки для Windows.

Пример:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."
3

В 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

3

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

В месте, где я работаю, есть команды, выполнение которых занимает много времени.

У меня та же проблема. Иногда что-то может длиться 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/

надеюсь, это помогло!

3

Я написал ntfy именно для этой цели. Он кроссплатформенный и может автоматически отправлять уведомления по окончании длительных команд.

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

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

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

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

  • подавлять автоматические уведомления, когда терминал находится на переднем плане (X11, iTerm2 & Terminal.app поддерживаются и включены по умолчанию)
  • отправлять облачные уведомления (Pushover, Pushbullet и XMPP)
  • использоваться для отправки уведомлений по окончании процесса (не упомянутая выше автоматическая поддержка)
  • отправлять уведомления вручную (хорошо для использования в скриптах!)
1

Так что это происходит довольно поздно, но я начал использовать систему для этого: у меня есть скрипт 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
1

Если вы используете 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 .

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

1

Жаль, что я не заметил эту тему лет назад. Мое решение было практически таким же, как у 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 для помещения сообщения в строку заголовка окна, из которого оно было выполнено. Иногда мне бывает удобно видеть, из какого окна пришло сообщение.

1

На системах с 'awk' попробуйте

awk 'BEGIN{ print "\a" }'

был единственным, кто работал на меня.

1

Если вы используете npm то узел-уведомитель предоставляет кроссплатформенное решение.

notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "

предварительный просмотр

  • Linux KDE

Linux KDE

  • Windows

Windows

  • Mac OS

макинтош

  • рычание

рычание

0

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

Установите, затем добавьте ;notifier.sh в конец вашей команды.

Например, если ваша команда была make install , вы должны сделать свою команду:

make install; notifier.sh

https://notifier.sh

https://play.google.com/store/apps/details?id=sh.notifier

0

Другая возможность заключается в использовании alert , работает на Linux.

>any-command; alert

Выдает уведомление как на картинке. оповещение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .