Bir iş / süreç sona erdiğinde bir bildirimi nasıl tetikleyebilirim?


86

Çalıştığım yerin yürütülmesi uzun zaman alan komutlara sahip.

Komut yürütme işlemi sona erdiğinde bana bildirmek için kullanabileceğim bir komut var mı? Bir açılır pencere veya belki biraz ses olabilir.


1
@ slhck'ın kabul ettiği cevap iyi: fg;say "Job finished"İşe yarayacağını anlamalıydım . Fakat ... daha da otomatikleştirilebilecek bir yolu var mı - yani bir dakika gibi bir eşikten daha fazla süren herhangi bir işin bitiminden sonra zili çalın veya haber verin? Örneğin, bash olarak, son komutun geçen zamanı gibi bir kabuk değişkeni var mı?
Çılgın Glew

... 2 saat sonra stackoverflow.com/questions/1862510/… ... put ' bulundu (($ $ zaman_show> $ {LONG_RUNTIME: -300})) & & "uzun süredir devam eden iş tamamlandı" deyin daha sonra,
emacs'ın

Yanıtlar:


119

Genel olarak, komutu çalıştırmadan önce bunu biliyorsanız , sadece şununla başlayabilirsiniz:

command; command-after &

Bu , önceki komuttan çıktıktan command-after sonra yürütülecektir (çıkış kodundan bağımsız olarak). &Arka planda başlayacaktır.

Başarılı veya başarısız bir çıkışla ilgileniyorsanız, sırasıyla şunları kullanın:

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

Komut daha önce başladıysa, askıya almak için iş denetimini kullanabilirsiniz, ardından fgbildiriminizle zincirlenmiş olarak ön plana geri getirin :

command
# enter Ctrl-z
fg ; command-after

Şimdi… Bundan sonra ne yapmak istediğinizi çevrenize bağlı.

  • On bir sistemin yapabilirsiniz "halka" Terminal çan . Tam olarak neyin işe yarayıp yaramadığını (BSD vs. GNU Linux vb.) Bağlıdır, ama tput belyapmalı. Yine de şu anda güvenilir bir şekilde test edemedim. Daha fazla bilgi için "zil çalın" arayın.

  • On Mac OS X , bir Bulucu iletişimini açmak için AppleScript'i olabilir:

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

    Sana bir şey söylemiş olabilir:

    say "Job finished"
    

    Ya da Mountain Lion’un bildirim sistemini kullanabilirsiniz:

    sudo gem install terminal-notifier # <= only need to do this once
    terminal-notifier -message "Job finished!" -title "Info"
    
  • In GNOME , zenitykomut satırından adlı bir GTK iletişim kutusunu gösterebilir. Ayrıca bu Yığın Taşması sorusuna bakınız: linux'ta bir bash betiğinden bir mesaj kutusu gösteriliyor . Favori paket yöneticiniz aracılığıyla kurulabilir.

    zenity --info --text="Job finished"
    
  • Bazı dağıtımlar olabilir xmessage. Özellikle GTK ortamları için var gxmessage.

  • Ubuntu ve GNOME gibi Masaüstü Bildirimleri Belirtimini uygulayan masaüstü ortamlarında , tetikleyebileceğiniz bir bildirim sistemi vardır (bunun bir parçası ).notify-sendlibnotify

    notify-send "Job finished!"
    
  • KDEkdialog , örneğin kullanır :

    kdialog --passivepopup 'Job finished'
    

Hangi komutu kullandığını bilmeme izin ver! Başka seçenekler de ekledim.
slhck

Notify-send ve xmessage ile uğraşıyorum. İkisi de ilginç görünüyor! İşte aradığım bir sonraki şey - superuser.com/questions/345463/…
Utkarsh Sinha

2
Mac OS X'te, "say" komut satırı yardımcı programını da kullanabilirsiniz. ayrıca birçok ses var, "say -h";) kontrol edin
trinth

1
Neden "komuttan sonra" nın zaman uyumsuz olarak çalıştırılması gerektiğini öneriyorsunuz? Demek istemiştin (command; command-after) &mi
G-Man

Bu çözüm Konsole kullanıcıları içindir ve komut tamamen tamamlanıncaya kadar ayrıntılı veya komut isteminin döndüğü noktaya kadar tamamlanana kadar tamamen sessiz (çıktı yok) olmasına bağlı olduğundan mükemmel bir çözüm değildir. Ancak, yardım aramaya geldiğimde tam olarak ihtiyacım olan şey buydu. Konsole’yu bir bildirim açacak, bir ses çalacak, vb. Yapacak şekilde yapılandırabilirsiniz. Daha sonra kabuk izlemeyi açmanız gerekir. Komutunuz tamamlanana kadar bir sürü şey çıktıyorsa sessizliği izleyin veya herhangi bir şey yazdırmazsa susturup kabuk geri döner.
MrMas

20

Unix benzeri sistemlerde sesli zili çalabilirsiniz:

echo -e "\a"

Bu mac hakkında bir mesaj bildirimine ek olarak gerçekten yararlı
Sirens

2
aynıtput bel
Dwight Spencer


5

Sesli bir bildirim almak için kullanabilirsiniz spd-say "Some text". Örnek:

some-command; spd-say "Yo"

Hangi işletim sistemi? Mac veya Ubuntu'da göremiyorum
Edward Falk

@EdwardFalk Ubuntu kullanıyorum
milkovsky

Tamam, oldukça eski bir sürüm kullanıyorum, bu yüzden belki daha yeni sürümlerde.
Edward Falk

1
Bu sadece bir metin konuşma uygulamasıdır. Aracılığıyla yükleyebilirsiniz sudo apt-get install speech-dispatcher. Veya alternatifleri kullanın askubuntu.com/questions/501910/…
milkovsky

Ahh, varsayılan olarak yüklenmemiş mi? Bunu düşünmeliydim. Bağlantı için teşekkürler.
Edward Falk


4

ntfyBu amaçla yazdım . Öyle çapraz platform ve edebilirsiniz otomatik uzun çalışan komutları bittiğinde bildirim gönderebilir.

Python'a sahipseniz pip(çoğu Linux dağıtımı ve MacOS'ta bulunur), nasıl yükleneceği ve otomatik bildirimlerin etkinleştirildiği yer:

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

Http://ntfy.rtfd.io adresinden kontrol edin.

Buna ek olarak, şunları da yapabilir:

  • Terminal ön plandayken otomatik bildirimleri bastır (X11, iTerm2 ve Terminal.app varsayılan olarak desteklenir ve etkinleştirilir)
  • bulut tabanlı bildirimler gönderin (Pushover, Pushbullet ve XMPP)
  • Bir işlem sona erdiğinde bildirim göndermek için kullanılır (yukarıda belirtilen otomatik destek değil)
  • manuel olarak bildirim gönder (komut dosyalarında kullanım için iyi!)

Sana iyi. Bu gerçekten en kullanışlı cevap.
Adam Bittlingmayer

Katılıyorum. Masaüstümde bir bildirim görüntülemek için kullanırım ve bildirimi aynı anda telefonuma iletirim.
Michael,

3

Linux için, her zaman bildirim için bir komut yazmak zorunda kalmadan, bunu otomatik olarak yapmak için şık bir numara vardır.

İlk önce autokey'i kurun. Bu, farklı tuş vuruşları için eylemlerin tanımlanmasına yardımcı olur.

sudo apt-get install autokey-gtk

Şimdi, otomatik tuşta yeni bir cümle tanımlayın ve kısayol tuşunu Alt + Enter olarak atayın. Bu cümleyi ekle:

; notify-send "Job finished!" &
  #

İlk satırdan sonra yeni bir satırın önemli olduğunu unutmayın.

Ayrıca, bir pencere filtresi ekleyin. Guake ve terminal kullanıyorum. Kullandığınız diğer terminalleri de dahil edin.

.*(guake)|(Terminal).*

Sen bittin!!

Şimdi, bir komut için bildirim almanız gerektiğinde, Enter / Return yerine Alt + Enter tuşlarını kullanarak çalıştırın.

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


3

Diğer cevaplar, bitmiş bir işte bildirim almanın yollarının çoğunu kapsamış olmasına rağmen, sorunuzu aşağıdaki biçimde sorduğunuzdan beri iki senti vermek istiyorum:

Çalıştığım yerin yürütülmesi uzun zaman alan komutlara sahip.

Bende de aynı problem var. Bazen bir şey 15 dakika boyunca koşabilir.

Benim .bashrc içinde aşağıdaki işlevi var:

# 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
}

Bu telefonuma bir bildirim itmek için Pushover uygulamasını kullanır. Bu şekilde öğle yemeğine gidebilir ya da bir toplantıya katılabilir ve ayrılmadan önce bilgisayarımdan başlattığım işler hakkında hala bildirim alabilirim.

Aşağıdaki şekilde kullanıyorum:

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

Bu nedenle, komut doğru bir çıkış kodu verirse, ilk basma işlemi gerçekleştirilir. Bir hata durumunda, ikincisi çalıştırılacaktır.

Ofc'de bir kullanıcı oluşturmanız ve https://pushover.net/ adresinden bildirim göndermek için bir uygulama kaydetmeniz gerekir.

Umarım bu yardımcı oldu!


Tamam, yani "pushover", "pushover" uygulaması yüklü olan telefonlara bildirim gönderen bir web servisidir?
Edward Falk

1
modern bir web tarayıcısı ile telefonlara, bilgisayarlara ve her şeye bildirim gönderen bir web servisidir . Böylece, PC'nizde ve telefonunuzda açık bir itme gücü açabilir ve tüm cihazlardan haberdar olabilirsiniz. temiz, ha? :-)
Thatkookooguy

1

Etkileşimli kabuğunuz olarak csh veya tcsh kullanıyorsanız, aşağıdaki notifykomutu kullanabilirsiniz :

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

Bash de set -bveya ile benzer bir etki elde edebilirsiniz set -o notify.

Muhtemelen ihtiyaçlarınızı karşılamıyor, çünkü tek yaptığı bir mesaj yazdırmak; Bir pencereyi açacak ya da zili çalabilecek şekilde yapılandırılabileceğini sanmıyorum.


Bir işin bitip bitmediğini bulmak için kabuğa bakmaktan kaçınmaya çalışıyorum. Yine de teşekkürler!
Utkarsh Sinha


1

Eğer kullanıyorsanız npmo zaman düğüm-notifier bir sağlamak çapraz platform çözümü .

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

Ön izleme

  • Linux KDE

Linux KDE

  • pencereler

pencereler

  • Mac os işletim sistemi

Mac

  • Büyün

Büyün


1

Keşke bu konuyu yıllar önce fark etseydim. Benim çözümüm aslında slhck'lerle aynıydı, ancak bir senaryo yazdım. Ben her zaman kullanırım. Paylaşmak için burada yayınlanıyor.

#!/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

Küçük bir açıklama: dize "\x1b]0;$msg\a", iletiyi çalıştırıldığı pencerenin başlık çubuğuna yerleştirmek için kullanılan ANSI çıkış dizisidir. Bazen mesajın hangi pencereden geldiğini görebilmek için oldukça kullanışlı buluyorum.



0

Başka bir olasılık da alertLinux'ta Works kullanmaktır .

>any-command; alert

Resimdeki gibi bir bildirim verir. uyarı bildirimi


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.