Kabuk Görevi Tamamlama Bildirimi


12

(OSX'e Özgü)

Ben, kendim dışındaki pek çok kişi gibi, kendimi genellikle kabuğumda tamamlanması bir iki dakika süren bir süreci tekmelemekte buluyorum (örneğin büyük bir svn taahhüdü). Bu süre zarfında, genellikle alt-sekme ve reddit / slashdot / wikipedia / öğesini yenilerim. Kabuk işlemi sona erdiğinde hırıltılı bir bildirim gönderen bir şey ayarlamak harika olurdu.

İdeal dünyamda şu şekilde çalışır: "Terminal'de açılan bir sekmeden yeni bir işlemden çıkılırsa, bir hırıltı bildirimi gönderin."

Böyle bir şey ayarlanmış başka biri var mı?


1
Hırıltı sadece ekranda oturuyorsanız sizi uyaracağını unutmayın. Daha uzun programlar için, tamamlandığını belirten bir ses ipucu almak için "say" komutunu kullanın.

@mankoff: growlnotifyUygulama bildirim ayarlarını Growl.prefPanesesli bildirim sesi içerecek şekilde yapılandırabilirsiniz . Bununla birlikte, yürüttüğünüz komuta bağlı olarak, değiştirilemez say. Ama daha az ürkütücü.
Daniel Beck

Yanıtlar:


11

Bunu yapmak için growlnotify yükleyebilirsiniz .

$ ./some_program && growlnotify Title -m Message

Elbette, emrinizi yerine getirmeden önce bunu düşünmeniz gerekir. Alternatif (bunu nasıl başaracağımı bilmiyorum), her komut için bir çılgınca bildirim olacak ve bu da can sıkıcı bir durum olurdu.


Kullanım durumunuz için growlnotify kullanımını basitleştirmek ~/bash_profileiçin aşağıdakileri düzenleyin ve ekleyin:

function long {
    $@
    /usr/local/bin/growlnotify Finished -m 'Done'
}

şimdi basitçe long your_command(benzer sudo) yapabilirsiniz. Ctrl-Aimleci satırın başlangıcına konumlandırır, (benim gibi) her zaman önce gerçek komutu yazarsanız ve daha sonra öneki eklemeniz gerekir.

Bash-fu'm maalesef growlnotifymesaja komut ekleyebilmek için yetersiz


@ mankoff'un bu cevaba yaptığı yorum başına:

Komut çalışırken yazabilirsiniz, daha sonra yürütülür. Benim için aşağıdaki işlevi yarattım:

function gn {
    /usr/local/bin/growlnotify Finished -m "$@"
}

Olarak kullan gn svn.


2
Komuttan önce düşünmenize gerek yok. Çalışırken, tamamlandığında bilgilendirilmek istediğinizi fark ederseniz, yalnızca "gn foo" yazın (veya sesli ipuçları için "tamamlandı" yazın), enter tuşuna basın ve geçerli komut bittiğinde bu komut çalışacaktır .

Bunu otomatik olarak yapma konusunda yorum yapıyorsunuz ... Zaman damgasına dokunmak için PS1 veya başka bir şey kullanın. PS1'in ne kadar süre dokunduğunu doğrulamak için PS2'yi kullanın. > N saniye geçtiyse, growlnotify komutunu çalıştırın. Artık can sıkıcı değil çünkü her komut için gerçekleşmiyor.

@mankoff Doğru. Dolayısıyla, yazmayı azaltmak için basit bir işlev yeterlidir.
Daniel Beck

@mankoff PS2? Bu sadece devam istemi değil mi? Her çıkış hattına ön ek yapmaz ..?
Daniel Beck

PS1 / PS2 sadece bunu uygulamak isteseydim bakmaya başladığım yerler olarak tahmin edildi. Belki de her şey sadece PS1'e gömülebilir. Ve belki de her komut için genel bir kurulum yapmak için tamamen farklı yollar vardır.

2

İhtiyacınız growlnotifyolan şey, hırıltı bildirimlerini tetikleyen bir CLI programıdır. Bunu şu şekilde kullanabilirsiniz:

./script.sh;; growlnotify -m "done"

Oynayabileceğiniz birkaç düğme daha var, growlnotify -hdaha fazla bilgi için kullanın


Teşekkürler. Ben de bunu bulduğumda aynı anda yorum yaptım. Noktalı virgül, &&'den daha mantıklıdır.
ezrock

1
@ezrock Ben başarı ve başarısızlık durumları arasında farklı mesajlar kullanmak &&ve kullanmak için rakam ||, ama sadece komut yürütüldükten sonra gösterilen bir mesaj ilgilenen varsa, o ;;zaman kusursuz. =)
roguesys

2

Daniel Beck'in cevabını değiştirerek bu küçük değişikliği yaparsanız çok güzel olur.

function long {
    command=$@
    $command
    /usr/local/bin/growlnotify Finished -m "$command completed."
}

Sonra 'uzun svn up' çalıştırdığınızda 'svn up tamamlandı' mesajını göreceksiniz.

Aynı anda birçok zaman alan kabuk komut dosyası çalıştırırsanız çok güzel.


2

OSX 10.8 ve sonraki sürümlerde yerel bildirimler bulunduğuna göre, aynı hedefi terminal-notifier aracılığıyla da gerçekleştiriyorum :

  1. Demlemek yükleyin
  2. $ brew install terminal-notifier
  3. Bunu şuraya ekle ~/.bash_profile:

    function gn {
        terminal-notifier  -message ' ' -title 'Finished'
    }

. ~/.bash_profileBir oturum oluştururken profiliniz otomatik olarak kaynaklandığından profilinizi (gelecekteki terminal oturumları için gerekli değildir) kaynakladığınızdan emin olun .

En sevdiğiniz komutla ve ardından işlev çağrısıyla test edin.

ls ; gn

Terminal-notifier argümanları bazı iyileştirmeler olabilir, ancak işleve geçmek için önceki komutu yakalama çabası başarılı olmadı ve bu bana ihtiyacım olan tüm işlevselliği getiriyor. Yani, ;gnuzun süren herhangi bir işlemin sonunda bir bildirim almak için ekleme .



1

Bu, "uzun süren" işlemler için otomatik olarak çağrılmasının bir yoludur: http://hints.macworld.com/article.php?story=20071009124425468

$PROMPT_COMMANDTamamlanması 10 saniyeden uzun süren süreçlerin içine girer ve tamamlandığını bildirir. Kendi ortamınıza ve iş akışınıza uyacak şekilde ince ayar yapmanız gerekebilir (örneğin, tamamlanmasını lessveya editör çağrısını yok saymak ), ancak kutudan çıktığı gibi gayet iyi çalışıyor gibi görünüyor.


Kendim denemedim, ama tamamen otomatik yaklaşım gerçekten çekici geliyor. Buradaki diğer tüm çözümler, komutun uzun süre çalışacağını önceden bilmeyi ve komut dosyasını tetiklemeyi hatırlamayı gerektirir (örn. Ls; growlnotify). Elle tetiklemeye gerek duymama fikrini seviyorum.
ezrock

0

Biraz daha etrafta dolaştım ve bunun için basit bir yöntem buldum. Olmasını istediğimden biraz daha manuel, ama işte gidiyor.

  1. Growlnotify'ı yükleyin (Growl'in kurulum indirmesinin ekstralar klasöründe bulunur) 1.
  2. && growlnotify -m "Message"Uzun bir işleme < > ekleyin .

Bu benim için işe yarıyor, ama daha iyisini yapabilirdim, methinks.


0

Üçüncü taraf yazılımı olmayan OSX 10.9+ çözümü:

OSX 10.9 ve sonraki display notificationsürümlerde, terminalden bir hırıltıyı aşağıdaki gibi görüntülemek için AppleScript komutunu kullanabilirsiniz :

osascript -e 'display notification with title "Process Completed."'

Bunların hepsini her seferinde yazmak istemiyorsanız, aşağıdakileri kullanabilirsiniz alias:

alias growl='osascript -e "display notification with title \"Process Completed.\""'

Misal:

long-running-script.sh; growl
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.