Bir iş / süreç tamamlandığında iTerm terminalinin beni bilgilendirmesini nasıl sağlayabilirim?


109

Bir bildirim merkezi bildirimi ideal olacaktır ancak hırıltı, zıplama yuvası, ses vb. De iyi olur (veya bu yalnızca Terminal.app'de yapılabiliyorsa, geri dönmek isterim). İTerm'in herhangi bir yerinde bildirimleri açma seçeneği var mı yoksa terminaldeki bir komutun sonunda yazmam gereken bir şey mi? İkincisi, süreç başladıktan sonra bir uyarı eklemek mümkün mü (örneğin, başlangıçta beklediğimden daha uzun süreceğini fark edersem, tahmin etmekte kötüyümdür).

Yanıtlar:


205

Halihazırda çalışan bir süreç hakkında bilgilendir

Kısayol: Aveya:

Edit -> Marks and Annotations -> Alerts -> Alert on next mark

Ürkütücü göz!: iTermterminalinizin tam anlamıyla bir gözünü (sağ üst köşede) tutacaktır. Komut bittiğinde Notification Center,.

Neden?

Komutu çoktan başlattık. Tamamlanması için gereken zamanı hafife aldık, iptal etmek istemiyoruz ve oturup seyretmeyi reddediyoruz. örneğin a brew updateuzun bir süre sonra!

Gereksinimler

iTerm: Kabuk Entegrasyonu:

iTerm2 -> Install Shell Integration

İTerm2 yeniden başlatılıncaya kadar entegrasyonun bildirim göstermeyeceğini unutmayın.


13
Kabuk entegrasyonlarını kurduktan sonra iTerm2 -> Tercihler -> Profiller -> Terminal'e gitmek isteyebilirsiniz, aşağı kaydırın ve "İşaret göstergelerini göster" seçeneğinin işaretini kaldırın, bu kabuk entegrasyonunu beğenmedim. Ayrıca, bir uyarı stili açılır penceresi yerine os bildirimlerini istiyorsanız Düzen -> İşaretler ve Ek Açıklamalar -> Uyarılar -> Bildirim gönder seçeneklerini de isteyebilirsiniz.
Charles

@simonhamp Gömülü oturumlar için tetikleyicileri ( iterm2.com/documentation-triggers.html ) kullanmanızı öneririm
phirschybar

3
@dwanderson Bunu hiç tmux ile çalıştırdınız mı? Bu çok yardımcı olur
Lucas

@Lucas Dokümanlarda kabuk entegrasyonunun tmux veya screen iterm2.com/documentation-shell-integration.html
Rich Stone

2
Bu göz beni korkutuyor !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS

42

Komut ile komut arasına noktalı virgül koyarak herhangi bir komuttan sonra aşağıdakilerden herhangi birini ekleyebilirsiniz:

afplay /System/Library/Sounds/Ping.aiff -v 2

osascript -e 'beep 3'

tput bel

veya Bildirim Merkezi'ni beğendiyseniz

osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

Ayrıca profilinizde bir takma ad oluşturabilir, aranabilir notifyve komutunuzun sonuna ekleyebilirsiniz. Yani, giriş profilinizde

alias notify="tput bel"

sonra

sleep 10; notify

Veya, eğer komutunuzu başlattıysanız ve "asılı" ise, sadece yazın notifyve vurun ve sonunda, komut bittiğinde takma Enteradınızı çalıştıracaktır notify, örn.

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>

Hmm, bu komutla osascript -e 'display notification "Task finished" with title "Terminal"'bu hatayı alıyor 2015-05-04 12:34:23.227 osascript[30467:1130887] Error loading /Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: dlopen(/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools, 262): no suitable image found. Did find:
gibiyim

hatanın ikinci bölümü/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax/Contents/MacOS/List & Record Tools: no matching architecture in universal wrapper osascript: OpenScripting.framework - scripting addition "/Users/mmarotta/Library/ScriptingAdditions/List & Record Tools.osax" declares no loadable handlers.
doğruluk

Mavericks veya Yosemite'den daha eski bir sistem mi kullanıyorsunuz?
Mark Setchell

Hayır, Yosemite 10.10.3
truth1ness

Oh, bu tuhaf. osascript -e 'display notification "Hello"'Özellikle buradan kopyalayıp yapıştırarak daha basit bir şey deneyebilir misiniz?
Mark Setchell

33

Ve her zaman saykomutu kullanabilirsiniz .

Genellikle, terminalin içinde uzun bir işlem yürüttüğünüzde ve güncelleme almak istediğinizde, bu komutu basitçe doneveya errorveya gibi şeyleri söylemek için kullanabilirsiniz bazinga.

mvn clean install; say done 

Bu komut bir java yay uygulaması oluşturur ve uzun bir zaman alır doneve işlem tamamlandıktan sonra ses çıkarır .


16

iTerm2Growlbildirimleri destekler . Her profil ayarında açabilirsiniz.

Preferences…-> içinde bir profil seçin Profiles. Sonra Terminalsekmede bir seçenek var Enable Growl Notifications.

Ayrıca tercihlerde iTermbildirimleri etkinleştirmeyi unutmayın Growl.

Belirli bir işlem için bildirim almak istiyorsanız, denemeyi deneyebilirsiniz Triggers. Tetikleyicileri Advancedbir profil ayarlarında sekmede tanımlarsınız . Bu şekilde, sürecinizin belirli bir çıktısına (regexp) bir Büyüme bildirimi atayabilirsiniz.

Örneğin şunları yapabilirsiniz:

$ mycommand; echo "end-of-my-process"

Ve tetikleyiciyi "işlemimin sonu" mesajına bağlayın.

Güncelleme

İTerm2.com'da tetikleyiciler hakkında daha fazla bilgi edinin .


Öyleyse, tamamlanmış herhangi bir işlem için bir uyarı almanın küresel bir yolu olmadığı konusunda haklı mıyım, çünkü işlemin sonunda ne yazdığını bilmek için komut dosyasını bir kez çalıştırmam gerekiyor (ve çalıştırdığım her komut dosyası için bir tane oluşturmam gerekiyor) )? Örneğin, bir youtube-dl işleminin son satırı, [download] 100% of 40.13MiB in 00:13ancak bu satır tamamladığı her dosya için tekrarlanır. "İşlemimin sonu" dizesi için ne yazmalıyım? Varsayılan kabuk istemimin ~ >tekrar görünmesi için bir tetikleme yapabilir miyim ?
reality1ness

@ truth1ness Bitmiş süreç hakkında bilgilendirilmenin genel bir yolu olduğunu sanmıyorum. iTermTerminal çıkışının sonu için yeni terminal çıkışı için bildirimler gönderir. Bu, bazı işlemler için işe yarayabilir. Tüm süreçler için çalışmanın yolu önerdiğim şeydir. "işlemimin sonu" mesajı herhangi bir benzersiz dize olabilir. Prosesiniz tarafından basılmayacak şekilde benzersizdir. Kelimenin tam anlamıyla "işlemimin sonu" metni olabilir. Tetikleyici tanımına tam olarak aynı dizeyi girmeli ve buna bir bildirim eklemelisiniz. Kabuk istemi ile çalışıp çalışmayacağını bilmiyorum. Kendin denemelisin.
baf

Ah, yanlış anladım, şimdi anladım. "İşlemimin-sonu" yankı çıktısıyla açılan bir uyarı alabildim. Bununla birlikte, işlem başlamadan önce echo komutunu gerçekten verdiğimde de bir uyarı alıyorum. İTerm'e komutu gerçekten verdiğimde ve yalnızca echo'd dizesine baktığımda dizeyi yoksaymasını nasıl söylerim? Yardım dosyasından tetikleyici normal ifadesinin başına \ 0 ("Normal ifade ile eşleşen değerin tamamı.") Eklemeyi denedim, ancak yine de tetikleyiciyi iki kez çalıştırıyor.
truth1ness

@ truth1ness Yaratıcı olun, örneğin echo "end-of-""my-process" içindeki alıntılarla kullanın . "İşlemimin sonu" metniyle yalnızca işlem bittiğinde eşleşecektir.
baf

9

Noti adında bir OSS aracı var .

Kolayca ile yükleyebilirsiniz brew install notive sadece ile komutu adýnýnönüne kullanmaya başlamak notigibi noti sleep 3.


3

terminal-notifierMac os sistem bildirimlerini de kullanabilirsiniz . Home brew ile kurmak için sadece:

$ brew install terminal-notifier

Ardından, işiniz / işleminiz bittiğinde bildirim görüntülemek istiyorsanız, bunun gibi bir şey kullanın

$ <your job/process command> && echo 'Completed' | terminal-notifier -sound default

Ve bu ekran şöyle:

görüntü açıklamasını buraya girin

Ayrıca bildirimlerin sesini ve simgesini de değiştirebilirsiniz. Github deposunda daha fazla bilgi: https://github.com/julienXX/terminal-notifier


1

İTerm2 kabuk entegrasyonunu kurun

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

Komutunuzu çalıştırın ve dikkat uygulamasını birleştirin, örn.

./task && ~/.iterm2/it2attention once

İş tamamlandıktan sonra iTerm uygulamasının simgesini zıplatmasına neden olur.

Ayrıca başka dikkat seçenekleriniz de var:

$ .iterm2/it2attention -h
Usage:
  it2attention start
    Begin bouncing the dock icon if another app is active
  it2attention stop
    Stop bouncing the dock icon if another app is active
  it2attention once
    Bounce the dock icon once if another app is active
  it2attention fireworks
    Show an explosion animation at the cursor
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.