Місце, в якому я працюю, має команди, які потребують тривалого часу для виконання.
Чи є команда / утиліта, яку я можу використовувати, щоб сповістити мене, коли виконання команди закінчиться? Це може бути спливаюче вікно або, можливо, мало звуку.
Місце, в якому я працюю, має команди, які потребують тривалого часу для виконання.
Чи є команда / утиліта, яку я можу використовувати, щоб сповістити мене, коли виконання команди закінчиться? Це може бути спливаюче вікно або, можливо, мало звуку.
Відповіді:
Як правило, якщо ви знаєте це перед тим, як запустити команду, ви можете просто почати її:
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
Тепер визначте нову фразу в автоматичному ключі та призначте гарячу клавішу як Alt + Enter. Додати цю фразу:
; notify-send "Job finished!" &
#
Зауважте, що новий рядок після першого рядка важливий.
Також додайте фільтр вікон. Я використовую guake та термінал. Включіть будь-який інший термінал, який ви використовуєте.
.*(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 :-("
Отже, якщо команда повертає правильний код виходу, перший натискання буде виконано. При помилці буде виконано друге.
Звичайно, потрібно створити користувача в Pushover і зареєструвати додаток для надсилання сповіщень з https://pushover.net/
сподіваюся, що це допомогло!
Якщо ви використовуєте csh або tcsh як свою інтерактивну оболонку, ви можете використовувати notify
команду:
% long-running-command &
[1] 14431
% notify %1
%
(later, when the command finishes)
[1] Done long-running-command
Ви можете досягти подібного ефекту в баші з set -b
або set -o notify
.
Це, ймовірно, не відповідає вашим вимогам, оскільки все, що він робить, це надрукувати повідомлення; Я не думаю, що це може бути налаштовано, щоб спливати вікно чи дзвонити у дзвоник.
У системах з 'awk' спробуйте
awk 'BEGIN{ print "\a" }'
був єдиним, хто працював для мене.
\a
( відповідь третього ).
Якщо ви використовуєте, npm
тоді вузол-сповіщувач забезпечить кросплатформенне рішення .
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"
- це послідовність аварійної послідовності 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, що минув час останньої команди?