Bagaimana saya bisa memicu notifikasi ketika pekerjaan / proses berakhir?


86

Tempat saya bekerja memiliki perintah yang membutuhkan waktu lama untuk dieksekusi.

Apakah ada perintah / utilitas yang dapat saya gunakan untuk memberi tahu saya ketika eksekusi perintah selesai? Ini bisa berupa jendela sembulan atau mungkin sedikit suara.


1
@ slhck jawaban yang diterima keren - aku seharusnya menyadari itu fg;say "Job finished"akan berhasil. Tapi ... adakah cara lain untuk dapat diotomatisasikan lebih lanjut - yaitu membunyikan bel atau memberi tahu setelah menyelesaikan pekerjaan apa pun yang membutuhkan lebih dari ambang batas seperti satu menit? Apakah ada variabel shell, misalnya dalam bash, yang sudah berlalu saat perintah terakhir?
Krazy Glew

... 2 jam kemudian, temukan stackoverflow.com/questions/1862510/ ... ... put '(($ timer_show> $ {LONG_RUNTIME: -300})) && mengatakan "pekerjaan lama selesai" "di timer_stop ... selanjutnya, tambahkan ke perintah kompilasi emacs ... dan beri tahu arloji Pebble saya (saya benci notifikasi telepon)
Krazy Glew

Jawaban:


119

Secara umum, jika Anda tahu ini sebelum menjalankan perintah, Anda bisa memulainya dengan:

command; command-after &

Ini akan mengeksekusi command-after setelah perintah sebelumnya telah keluar (terlepas dari kode keluarnya). The &akan memulainya di latar belakang.

Jika Anda peduli akan berhasil atau gagal, masing-masing menggunakan:

command && command-after-only-if-success &
command || command-after-only-if-fail &

Jika perintah sudah dimulai, Anda dapat menggunakan kontrol pekerjaan untuk menangguhkannya, lalu mengembalikannya ke latar depan dengan fgdirantai dengan pemberitahuan Anda:

command
# enter Ctrl-z
fg ; command-after

Sekarang ... apa yang ingin Anda lakukan setelah ini tergantung pada lingkungan Anda.

  • Pada sistem apa pun , Anda dapat "membunyikan" bel terminal . Tergantung pada sistem tepatnya apa yang benar-benar berfungsi (BSD vs GNU Linux, dll.), Tetapi tput belharus dilakukan. Tapi saya tidak bisa mengujinya saat ini. Cari "bel dering" untuk mencari tahu lebih lanjut.

  • Di Mac OS X , Anda bisa menggunakan AppleScript untuk memunculkan dialog Finder:

    osascript -e 'tell Application "Finder" to display dialog "Job finished" '
    

    Anda bisa mengatakan sesuatu kepada Anda:

    say "Job finished"
    

    Atau Anda dapat menggunakan sistem notifikasi Mountain Lion:

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • Di GNOME , zenitydapat menampilkan kotak dialog GTK, dipanggil dari baris perintah. Lihat juga pertanyaan Stack Overflow ini: menampilkan kotak pesan dari skrip bash di linux . Ini dapat diinstal melalui manajer paket favorit Anda.

    zenity --info --text="Job finished"
    
  • Beberapa distribusi mungkin punya xmessage. Khusus untuk lingkungan GTK, ada gxmessage.

  • Di lingkungan desktop yang menerapkan Spesifikasi Pemberitahuan Desktop , seperti Ubuntu dan GNOME , ada sistem pemberitahuan yang dapat Anda picu notify-send(bagian dari libnotify).

    notify-send "Job finished!"
    
  • Penggunaan KDEkdialog , misalnya:

    kdialog --passivepopup 'Job finished'
    

Biarkan saya tahu perintah apa yang Anda gunakan! Saya menambahkan beberapa opsi lain juga.
slhck

Saya mengutak-atik notify-send dan xmessage. Keduanya tampaknya menarik! Inilah hal berikutnya yang saya cari - superuser.com/questions/345463/…
Utkarsh Sinha

2
pada Mac OS X, Anda juga dapat menggunakan utilitas baris perintah "katakan". ada juga banyak suara yang tersedia, periksa "katakan-h";)
trinth

1
Mengapa Anda menyarankan bahwa "perintah-setelah" harus dijalankan secara tidak sinkron? Apakah Anda bermaksud mengatakannya (command; command-after) &?
G-Man

Solusi ini adalah untuk pengguna Konsole dan bukan solusi yang sempurna karena bergantung pada perintah Anda baik yang verbose sampai selesai, atau benar-benar diam (tidak ada output) sampai selesai di titik mana prompt kembali. Namun, inilah tepatnya yang saya butuhkan ketika saya datang mencari bantuan. Anda dapat mengkonfigurasi Konsole untuk memunculkan pemberitahuan, memutar suara, dll. Kemudian Anda harus mengaktifkan pemantauan shell. Pantau keheningan jika perintah Anda mengeluarkan banyak hal sampai selesai, atau diam jika tidak mencetak apa-apa dan kemudian shell kembali.
MrMas

20

Pada sistem seperti unix, Anda dapat membunyikan bel terdengar:

echo -e "\a"

Ini sangat berguna selain pemberitahuan pesan pada mac
Sirene

2
sama dengantput bel
Dwight Spencer


5

Untuk mendapatkan notifikasi suara yang bisa Anda gunakan spd-say "Some text". Contoh:

some-command; spd-say "Yo"

OS apa? Saya tidak melihatnya di Mac atau Ubuntu
Edward Falk

@ EdwardFalk Saya menggunakan Ubuntu
milkovsky

OK, saya menggunakan versi yang cukup lama, jadi mungkin itu dalam versi yang lebih baru.
Edward Falk

1
Ini hanya aplikasi text-to-speech. Anda dapat menginstalnya melalui sudo apt-get install speech-dispatcher. Atau gunakan alternatif askubuntu.com/questions/501910/...
milkovsky

Ahh, tidak diinstal secara default? Aku seharusnya memikirkan itu. Terima kasih untuk tautannya.
Edward Falk

4

Saya baru saja mulai menggunakan notifu untuk notifikasi desktop dari Cygwin. Ini adalah aplikasi pemberitahuan baris perintah untuk Windows.

Contoh:

ls -l && /c/notifu-1.6/notifu64 /m "This is a simple Notifu message."

4

Saya menulis ntfyuntuk tujuan ini. Ini adalah lintas platform dan dapat secara otomatis mengirim notifikasi ketika perintah yang berjalan lama selesai.

Jika Anda memiliki Python pip(kebanyakan distro Linux dan MacOS memilikinya), berikut ini cara menginstalnya dan mengaktifkan pemberitahuan otomatis:

$ sudo pip install ntfy
$ echo 'eval "$(ntfy shell-integration)"' >> ~/.bashrc
$ # restart your shell

Lihat di http://ntfy.rtfd.io

Selain itu, ia juga dapat:

  • Menekan pemberitahuan otomatis ketika terminal di latar depan (X11, iTerm2 & Terminal.app didukung dan diaktifkan secara default)
  • mengirim pemberitahuan berbasis cloud (Pushover, Pushbullet, dan XMPP)
  • digunakan untuk mengirim pemberitahuan ketika suatu proses berakhir (bukan dukungan otomatis yang disebutkan di atas)
  • mengirim pemberitahuan secara manual (baik untuk digunakan dalam skrip!)

Bagus untukmu. Ini benar-benar jawaban yang paling berguna.
Adam Bittlingmayer

Saya setuju. Saya menggunakannya untuk menampilkan notifikasi pada desktop saya dan mendorong notifikasi ke ponsel saya secara bersamaan.
Michael

3

Untuk Linux, ada trik bagus untuk melakukan ini secara otomatis tanpa harus mengetikkan perintah untuk pemberitahuan setiap saat.

Pertama instal autokey. Ini membantu mendefinisikan tindakan untuk penekanan tombol yang berbeda.

sudo apt-get install autokey-gtk

Sekarang, tentukan frasa baru dalam autokey dan tetapkan hotkey sebagai Alt + Enter. Tambahkan frasa ini:

; notify-send "Job finished!" &
  #

Perhatikan bahwa baris baru setelah baris pertama itu penting.

Juga, tambahkan filter jendela. Saya menggunakan guake dan terminal. Sertakan terminal apa pun yang Anda gunakan.

.*(guake)|(Terminal).*

Kamu sudah selesai!!

Sekarang, setiap kali Anda perlu mendapatkan notifikasi untuk suatu perintah, jalankan menggunakan Alt + Enter dan bukan Enter / Kembali.

Sumber: http://dotpad.blogspot.in/2014/12/notification-when-command-finished.html


3

Meskipun jawaban lain sudah mencakup sebagian besar cara untuk mendapatkan pemberitahuan tentang pekerjaan yang sudah selesai, saya ingin memberikan dua sen saya karena Anda mengajukan pertanyaan Anda dalam format berikut:

Tempat saya bekerja memiliki perintah yang membutuhkan waktu lama untuk dieksekusi.

Saya memiliki masalah yang sama. Terkadang sesuatu dapat berjalan selama 15 menit.

Saya memiliki fungsi berikut di .bashrc saya:

# push a notification to your phone. can be handy if you're running a
# build and you want to be notified when it's finished.
push() {
    curl -s -F "token=PUSHOVER_TOKEN" \
    -F "user=PUSHOVER_USER" \
    -F "title=terminal" \
    -F "message=$1" https://api.pushover.net/1/messages.json > /dev/null 2>&1
}

Ini menggunakan aplikasi Pushover untuk mendorong pemberitahuan ke telepon saya. Dengan cara ini saya bisa pergi makan siang atau mengikuti rapat dan masih mendapat pemberitahuan tentang pekerjaan yang saya mulai di komputer saya sebelum saya pergi.

Saya menggunakannya dengan cara berikut:

command_to_run && push "yes! command finished successfully!" || push "awww man! something failed :-("

Jadi, jika perintah mengembalikan kode keluar yang benar, dorongan pertama akan dieksekusi. Pada kesalahan, yang kedua akan dieksekusi.

Ofc Anda perlu membuat pengguna di Pushover, dan mendaftarkan aplikasi untuk mengirim pemberitahuan dari https://pushover.net/

semoga ini membantu!


OK, jadi "pushover" adalah layanan web yang mengirimkan pemberitahuan ke ponsel yang memiliki aplikasi "pushover" diinstal?
Edward Falk

1
ini adalah layanan web yang mengirimkan pemberitahuan ke ponsel, komputer, & semuanya dengan browser web modern . Jadi, Anda dapat membuka pushover di PC dan ponsel Anda dan diberi tahu di semua perangkat. rapi, ya? :-)
Thatkookooguy

1

Jika Anda menggunakan csh atau tcsh sebagai shell interaktif Anda, Anda dapat menggunakan notifyperintah:

% long-running-command &
[1] 14431
% notify %1
% 
(later, when the command finishes)
[1]    Done                          long-running-command

Anda dapat mencapai efek serupa di bash dengan set -batau set -o notify.

Ini mungkin tidak memenuhi persyaratan Anda, karena yang dilakukannya hanyalah mencetak pesan; Saya tidak berpikir itu dapat dikonfigurasi untuk membuka jendela atau membunyikan bel.


Saya berusaha menghindari melihat shell untuk mencari tahu apakah pekerjaan selesai. Terimakasih Meskipun!
Utkarsh Sinha


1

Jika Anda menggunakan npmkemudian simpul-notifier memberikan solusi cross-platform .

notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. "

Pratinjau

  • Linux KDE

Linux KDE

  • Windows

Windows

  • OS Mac

Mac

  • Menggeram

Menggeram


1

Seandainya aku memperhatikan utas ini bertahun-tahun yang lalu. Solusi saya pada dasarnya sama dengan slhck, tetapi saya menulis sebuah skrip. Saya menggunakannya sepanjang waktu. Posting di sini untuk membagikannya.

#!/bin/bash

msg='all done'
quiet=false
if [ "$1" = '-q' ]; then quiet=true; shift; fi
if [ $# -gt 0 ]; then msg="$*"; fi

echo -ne "\x1b]0;$msg\a"
if [ -x /usr/bin/zenity ]; then
  unset WINDOWID
  exec zenity --info --text="$msg"
elif [ -x /usr/bin/xmessage ]; then
  exec xmessage -nearmouse "$msg"
elif [ -x /usr/bin/osascript ]; then
  if ! $quiet; then say "done" &; fi
  osascript -e "tell application \"System Events\" to display dialog \"$msg\""
else
  echo $msg
fi

Satu penjelasan kecil: string "\x1b]0;$msg\a"adalah urutan pelarian ANSI untuk meletakkan pesan di bilah judul jendela dari mana ia dieksekusi. Saya merasa kadang-kadang cukup berguna untuk dapat melihat dari jendela mana pesan itu berasal.


1

Jadi ini datang agak terlambat, tapi saya sudah mulai menggunakan sistem untuk melakukan ini: Saya punya skrip bash yang mengeksekusi perintah apa pun yang diteruskan ke sana setelah itu

http://somesh.io/2017/02/19/get-notified-when-long-commands-are-done-executing-on-ubuntu/

#!/bin/bash


# file location : /usr/bin/n

set +e


# $@ executes whatever command is typed after the filename

$@


notify-send "Task Completed"

dan kemudian saya hanya menambahkan n

n bundle install
n npm install


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.