Moje plocha je Ubuntu, která má šikovný program notify-send
, který na ploše vyskočí upozornění. Má také vestavěný následující praktický alias:
$ 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$//')"'
To znamená, že můžete spustit příkaz very-long-running-command; alert
, ponechte terminál spuštěný na pozadí a po dokončení úkolu obdržíte upozornění.
Když jste na serveru CentOS přes ssh, věci jsou trochu složitější. Zde je jeden způsob, jak to udělat:
localhost$ ssh [email protected]; alert
example.net$ very-long-running-command; exit
Po určité době to funguje, ale ukončení po každém příkazu není obecně to, co chci.
Můj počítač nemá reproduktory. Může pípat.
Přijatá odpověď:
Nejjednodušší věc, kterou si zde dokážu představit, je použít druhou relaci SSH k předání pojmenovaného FIFO. Předpokládám, že máte tmp/
ve vašem domovském adresáři; můžete si FIFO nechat, kdekoli chcete.
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 &
Pak to můžete nechat běžet na pozadí, zatímco otevřete druhou relaci SSH, abyste mohli dělat svou skutečnou práci:
local$ ssh [email protected]
remote$ alias remote_alert='echo ... >~/tmp/alert_fifo'
remote$ long_running_command; remote_alert
…kde remote_alert
je upravené alert
alias s notify_send --urgency=low -i
nahrazeno ozvěnou věcí do FIFO.
To bude fungovat s minimální sadou nástrojů na vzdáleném počítači:pouze ssh a standardními nástroji POSIX. Pokud však s FIFO zapomenete spustit čtečku (nebo vaše čtečka zemře), váš zapisovač se zasekne. Pokud tedy náhodou máte socat
k dispozici, můžete to udělat trochu shovívavější:
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'