Задать вопрос

Linux. Shell. Звуковое информирование о окончании выполнения длительной комманды

Иногда в терминале запускаешь комманды, которые выполняются довольно долго (минуты). Пока ждешь переходишь к чтению всяких сайтиков или вовсе уходишь из-за компа. Хотелось бы получать звуковые уведомления, по окончанию такого процесса.
Причем звуковое уведомление нужно, если процесс довольно длительлный (допустим выполняется больше 20 секунд).

Как я вижу это:
Какая-то моя комманда запускается в консоли, если выполненение заняло больше 20 секунд, то по окончанию происходит beep. Если же выполнелось быстро - не запускать ничего. (Чтобы избежать случаю, когда запускаешь много мелких комманд и получаешь постоянно beep, beep, beep)

Подскажите в какую сторону копать? есть готовые решения или хотя бы заготовки?
  • Вопрос задан
  • 3228 просмотров
Подписаться 8 Оценить Комментировать
Решения вопроса 1
zmeyjr
@zmeyjr
Дисклеймер в профиле.
есть такая клевая штука mumak.net/undistract-me + статья на хабре habrahabr.ru/post/174449
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
long command && echo -en "\007"
Ответ написан
Комментировать
@seniorivn
welinux.ru/post/963
и переходите на zsh
Ответ написан
Комментировать
merryjane
@merryjane
Системный администратор
На счет звука не думаю что это хороший вариант, да и спикеры подключены сейчас мало где, вот всплывающие сообщение вполне себе:
notify-send --expire-time=10000 "Important command" "Process have finished"


Подключить можно также через &&, например:
gzip very_big_dump_file.sql && notify-send --expire-time=10000 "Dump" "gzip have done"
Ответ написан
@dmitry_hidden Автор вопроса
Что-то не вижу я готового красивого решения (

Может создать свой велосипед?
Возникла идея перекрыть bash_rc функцию prompt_command, который будет отсылать вызываемые комманды в отдельный демон на python, в котором будет реализована все логика.
Сообщения передавать через dbus-send
Как вам идея?
Ответ написан
@xandox
Добавь в .bashrc что-то вида
function notify_if_long() { 
    start=$(date +%s); 
    eval "$@"; 
    end=$(date +%s); 
    elaps=$(( $end - $start )); 
    if [[ $elaps > 10 ]]; # или сколько там секунд тебе надо 
    then 
           echo -en "\007"; #тут любой из предложенных способов натификации
    fi;
}

использовать так
notify_if_long sleep 11
notify_if_long cat somefile \| grep something
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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