Вопрос: Как я могу вызвать уведомление с удаленного терминала в OS X


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

Я могу приблизиться к моему желаемому результату, используя триггер iTerm2. Например, если я запустил следующее на удаленном сервере и настроил триггер iTerm2 для __FINISHED__:

./long_process && echo "\__FINISHED__"

У этого есть нежелательная функция, которая каждый раз, когда я перехожу назад к этой команде в моем редакторе или моем коде (я запускаю код в оболочке emacs), триггеры уведомления.

Одним из решений может быть какое-то текстовое уведомление, которое iTerm2 будет распознавать, но это не будет отображаться в буфере обратной прокрутки emacs.


2
2017-09-13 18:49


Источник


echo "__FIN""ISHED__" - grawity
На полпути - он предотвращает уведомления при прокрутке кода, но не предотвращает нежелательные уведомления, если я просматриваю свое окно вывода. - pnj


Ответы:


Вы не указали, какое уведомление вы хотите, и какую операционную систему на удаленном сервере запущен, поэтому мне придется сделать некоторые предположения здесь. Я предполагаю, что вам все равно, какой тип уведомления он до тех пор, пока вы будете уведомлены, и что на удаленном сервере есть какой-то вкус * nix.

  1. Отправьте себе электронное письмо. Если sendmail настроен на сервере, вы можете сделать

    ./long_process && echo "Job done" | sendmail pnj@yourdomain.com
    
  2. ssh обратно на ваш локальный компьютер (при условии, что это возможно) и заставить его говорить с вами. Видеть Вот для более прохладных способов сделать звуковой сигнал OSX у вас.

    ./long_process && ssh you@local.ip say "Yo! All done"
    

    или

    ./long_process && ssh you@local.ip terminal-notifier -message "Job finished!" -title "Info"
    

    Если вы подключаетесь к динамическому IP-адресу а также вы настроили свой маршрутизатор так, чтобы вы могли ssh на этот динамический IP, вы можете сделать это (если вы только подключены к удаленному компьютеру в настоящий момент):

    ip=$(who | grep $USER | perl -lne 's/\\((.+?)\\)\s*$//; print "$1"' | tail -n 1) &&
     ./long_process && ssh you@$ip terminal-notifier -message "Job finished!" -title "Info"
    

    Вы можете настроить ssh без пароля. нормальный путь, Динамический IP-адрес не должен зависеть. Как только вы это сделаете, код выше будет работать.

  3. использование пустяковое дело и отправьте уведомление на ваше устройство Android или iOS (если оно у вас есть)

    ./long_process && pushover.pl "All done"
    

4
2017-09-13 20:21



С помощью say над SSH действительно приятно на Mac. - slhck
@slhck heh, да, я бы это прочитал :). - terdon
# 2 - это концепция, которую я ищу, но локальная машина - это ноутбук и имеет динамический IP-адрес. В идеале я хочу что-то вроде терминального уведомителя, т. Е. Небольшое, бесшумное всплывающее окно. Даже если удаленная оболочка знает процесс нереста, я не уверен, как ssh будет работать без ввода моего пароля каждый раз, учитывая динамический IP. - pnj
@pnj см. обновленный ответ. - terdon
@terdon, который делает это, после исправления обратных косых черт в выражении perl, которое суперпользователь ел. - pnj


Ты можешь echo колокольчик - \a в удаленном терминале: ./long_process ; echo -e '\a'

Некоторые эмуляторы терминала будут воспроизводить какой-то звук и могут показывать уведомления. iTerm2, в частности, покажет уведомление и воспроизведет звук, если вкладка «Процесс» не сфокусирована.

Также обратите внимание, что я использовал ; для разделения команд. Таким образом, вы будете уведомлять, даже если команда возвращает ненулевой статус во время && будет выполняться только в том случае, если команда выполнена успешно.


2
2018-01-09 21:18