Il mio desktop è Ubuntu, che ha il pratico programma notify-send
, che fa apparire un avviso sul desktop. Ha anche il seguente pratico alias integrato:
$ 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$//')"'
Ciò significa che puoi eseguire very-long-running-command; alert
, lascia il terminale in esecuzione in background e ricevi una notifica al termine dell'attività.
Quando sei su un server CentOS tramite ssh, le cose sono un po' più complicate. Ecco un modo per farlo:
localhost$ ssh [email protected]; alert
example.net$ very-long-running-command; exit
In un certo senso funziona, ma uscire dopo ogni comando non è generalmente quello che voglio fare.
Il mio computer non ha altoparlanti. Può emettere un segnale acustico.
Risposta accettata:
La cosa più semplice che posso immaginare qui è usare una seconda sessione SSH per inoltrare un FIFO denominato. Presumo che tu abbia un tmp/
nella tua home directory; sentiti libero di mantenere la FIFO dove vuoi.
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 &
Quindi puoi lasciare che venga eseguito in background mentre apri una seconda sessione SSH per fare il tuo vero lavoro:
local$ ssh [email protected]
remote$ alias remote_alert='echo ... >~/tmp/alert_fifo'
remote$ long_running_command; remote_alert
…dove remote_alert
è un alert
modificato alias con notify_send --urgency=low -i
sostituito con cose che echeggiano alla FIFO.
Funzionerà con un set minimo di strumenti sulla macchina remota:solo utilità ssh e POSIX standard. Tuttavia, con un FIFO, se dimentichi di eseguire il tuo lettore (o il tuo lettore muore), il tuo scrittore si bloccherà. Quindi se ti capita di avere socat
disponibile, puoi renderlo un po' più clemente:
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'