Desktop saya adalah Ubuntu, yang memiliki program praktis notify-send
, yang memunculkan peringatan di desktop. Ia juga memiliki alias praktis berikut ini:
$ 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$//')"'
Ini berarti Anda dapat menjalankan very-long-running-command; alert
, biarkan terminal berjalan di latar belakang, dan terima pemberitahuan saat tugas selesai.
Saat Anda berada di server CentOS melalui ssh, semuanya sedikit lebih rumit. Inilah salah satu cara untuk melakukannya:
localhost$ ssh [email protected]; alert
example.net$ very-long-running-command; exit
Ini berfungsi, setelah mode, tetapi keluar setelah setiap perintah umumnya bukan yang ingin saya lakukan.
Komputer saya tidak memiliki speaker. Itu bisa berbunyi bip.
Jawaban yang Diterima:
Hal paling sederhana yang dapat saya bayangkan di sini adalah menggunakan sesi SSH kedua untuk meneruskan FIFO bernama. Saya berasumsi Anda memiliki tmp/
di direktori rumah Anda; jangan ragu untuk menyimpan FIFO di mana pun Anda suka.
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 &
Kemudian Anda dapat membiarkan ini berjalan di latar belakang saat Anda membuka sesi SSH kedua untuk melakukan pekerjaan Anda yang sebenarnya:
local$ ssh [email protected]
remote$ alias remote_alert='echo ... >~/tmp/alert_fifo'
remote$ long_running_command; remote_alert
…di mana remote_alert
adalah alert
. yang dimodifikasi alias dengan notify_send --urgency=low -i
diganti dengan menggemakan hal-hal ke FIFO.
Ini akan bekerja dengan seperangkat alat minimal pada mesin jarak jauh:hanya ssh dan utilitas POSIX standar. Namun, dengan FIFO, jika Anda lupa menjalankan pembaca Anda (atau pembaca Anda mati), maka penulis Anda akan hang. Jadi jika Anda memiliki socat
tersedia, Anda dapat membuat ini sedikit lebih memaafkan:
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'