Mi escritorio es Ubuntu, que tiene el práctico programa notify-send
, que muestra una alerta en el escritorio. También tiene incorporado el siguiente alias práctico:
$ type alert
alert is aliased to `notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e 's/^s*[0-9]+s*//;s/[;&|]s*alert$//')"'
Esto significa que puede ejecutar very-long-running-command; alert
, deje el terminal ejecutándose en segundo plano y reciba una notificación cuando se complete la tarea.
Cuando estás en un servidor CentOS a través de ssh, las cosas son un poco más complicadas. Esta es una forma de hacerlo:
localhost$ ssh [email protected]; alert
example.net$ very-long-running-command; exit
Esto funciona, de alguna manera, pero salir después de cada comando generalmente no es lo que quiero hacer.
Mi computadora no tiene parlantes. Puede emitir un pitido.
Respuesta aceptada:
Lo más simple que puedo imaginar aquí es usar una segunda sesión SSH para reenviar un FIFO con nombre. Supongo que tienes un tmp/
en el directorio de tu casa; siéntete libre de mantener el FIFO donde quieras.
local$ ssh [email protected] 'mkfifo ~/tmp/alert_fifo ; while cat ~/tmp/alert_fifo ; do : ; done' |
while read icon_name text ; do
notify_send --urgency=low -i "$icon_name" "$text"
done &
Luego puede dejar que esto se ejecute en segundo plano mientras abre una segunda sesión SSH para hacer su trabajo real:
local$ ssh [email protected]
remote$ alias remote_alert='echo ... >~/tmp/alert_fifo'
remote$ long_running_command; remote_alert
…donde remote_alert
es una alert
modificada alias con notify_send --urgency=low -i
reemplazado con hacer eco de las cosas al FIFO.
Esto funcionará con un conjunto mínimo de herramientas en la máquina remota:solo las utilidades ssh y POSIX estándar. Sin embargo, con un FIFO, si olvida ejecutar su lector (o su lector muere), entonces su escritor se colgará. Entonces, si tiene socat
disponibles, puedes hacer esto un poco más indulgente:
local$ ssh [email protected] 'socat UNIX-RECV:~/tmp/alert_socket -' |
while read ...
...
done &
local$ ssh [email protected]
remote$ alias remote_alert='echo ... | socat - UNIX-SEND:~/tmp/alert_socket'