Bagaimana saya membuat terminal iTerm memberi tahu saya ketika suatu pekerjaan / proses selesai?

106

Notifikasi pusat notifikasi akan ideal tetapi growl, bounce dock, suara, dll juga akan baik-baik saja (atau jika ini hanya dapat dilakukan di Terminal.app, saya akan bersedia untuk beralih kembali). Apakah ada opsi di suatu tempat di iTerm untuk mengaktifkan pemberitahuan atau apakah itu sesuatu yang saya harus ketik di akhir perintah di terminal? Jika yang terakhir, apakah mungkin untuk menambahkan peringatan setelah proses dimulai (misalnya jika saya menyadari itu akan memakan waktu lebih lama dari yang saya harapkan, saya buruk dalam menebak).

kebenaran
sumber

Jawaban:

198

Beri tahu tentang proses yang sudah berjalan

Pintasan: Aatau:

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

Mata seram!: iTermakan mengawasi (di pojok kanan atas) terminal Anda. Setelah perintah selesai, itu akan menghubungi Notification Center.

Mengapa?

Kami sudah meluncurkan perintah. Kami meremehkan waktu yang dibutuhkan untuk penyelesaian, kami tidak ingin membatalkannya, dan kami menolak untuk duduk dan menontonnya. Misalnya brew updatesetelah waktu yang lama!

Persyaratan

iTerm: Integrasi Shell:

iTerm2 -> Install Shell Integration

Perhatikan bahwa integrasi tidak akan menampilkan pemberitahuan sampai iTerm2 dimulai ulang.

Paschalis
sumber
11
Setelah menginstal integrasi shell Anda mungkin ingin pergi ke iTerm2 -> Preferensi -> Profil -> Terminal, gulir ke bawah & hapus centang "Tampilkan indikator tanda", saya tidak suka integrasi shell ini. Anda mungkin juga ingin Edit -> Marks and Annotations -> Alerts -> Post notification jika Anda menginginkan notifikasi os daripada popup gaya peringatan.
Charles L.
@simonhamp Saya sarankan menggunakan pemicu ( iterm2.com/documentation-triggers.html ) untuk sesi terkubur
phirschybar
3
@dwanderson Apakah Anda pernah mengerjakan ini dengan tmux? Ini akan sangat membantu
Lucas
@Lucas ada baris di dokumen yang mengatakan bahwa integrasi shell tidak berfungsi dengan tmux atau layar iterm2.com/documentation-shell-integration.html
Rich Stone
2
Mata ini membuatku takut !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Anda dapat menambahkan salah satu dari berikut ini setelah perintah apa pun, dengan titik koma di antara perintah dan itu:

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

osascript -e 'beep 3'

tput bel

atau, jika Anda suka Pusat Pemberitahuan

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

Anda juga dapat membuat alias di profil Anda, memanggil notifydan menambahkannya di akhir perintah Anda. Jadi, di profil login Anda

alias notify="tput bel"

kemudian

sleep 10; notify

Atau, jika Anda memulai perintah Anda dan itu "hang", cukup ketik notifydan tekan Enterdan itu akan menjalankan notifyalias Anda di akhir, ketika perintah telah selesai, mis.

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Mark Setchell
sumber
Hmm, dengan perintah ini osascript -e 'display notification "Task finished" with title "Terminal"'saya sepertinya mendapatkan kesalahan ini2015-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:
truth1ness
bagian kedua dari kesalahan/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.
truth1ness
Apakah Anda menggunakan sistem yang lebih tua dari Mavericks atau Yosemite?
Mark Setchell
Tidak, Yosemite 10.10.3
truth1ness
Oh, itu aneh. Dapatkah Anda mencoba sesuatu yang lebih sederhana seperti osascript -e 'display notification "Hello"'- dengan menyalin dan menempel secara khusus dari sini.
Mark Setchell
33

Dan Anda selalu dapat menggunakan sayperintah tersebut.

Biasanya ketika Anda menjalankan proses yang panjang di dalam terminal dan ingin diperbarui, Anda cukup menggunakan perintah ini untuk mengucapkan hal-hal seperti doneatau erroratau bazinga.

mvn clean install; say done 

Perintah ini membangun aplikasi java spring, dan membutuhkan waktu lama, dan akan bersuara donesetelah proses selesai.

Farhan Salam
sumber
16

iTerm2mendukung Growlnotifikasi. Anda dapat mengaktifkannya di setiap pengaturan profil.

Pilih profil di Preferences…-> Profiles. Kemudian di Terminaltab ada opsi Enable Growl Notifications.

Ingatlah untuk juga mengaktifkan iTermpemberitahuan di Growlpreferensi.

Jika Anda ingin mendapatkan pemberitahuan untuk proses tertentu, Anda dapat mencoba bereksperimen Triggers. Anda menentukan pemicu di Advancedtab dalam pengaturan profil. Dengan cara ini Anda dapat menetapkan pemberitahuan Growl ke keluaran tertentu dari proses Anda (regexp).

Misalnya, Anda dapat melakukan:

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

Dan hubungkan pemicu ke pesan "end-of-my-process".

Memperbarui

Baca lebih lanjut tentang pemicu di iTerm2.com .

baf
sumber
Jadi, apakah saya benar bahwa tidak ada cara global untuk mendapatkan peringatan untuk setiap proses yang telah selesai karena saya harus menjalankan skrip sekali untuk mengetahui apa yang ditulisnya di akhir proses (dan saya harus membuatnya untuk setiap skrip yang saya jalankan )? Misalnya, baris terakhir untuk proses youtube-dl adalah [download] 100% of 40.13MiB in 00:13tetapi baris ini diulangi untuk setiap file yang diselesaikannya. Apa yang akan saya masukkan untuk string 'akhir-proses-saya'? Bisakah saya membuat pemicu ketika prompt shell default saya ~ >muncul lagi?
kebenaran1ness
@ truth1ness Menurut saya tidak ada cara umum untuk mendapatkan informasi tentang proses yang sudah selesai. iTermmengirim pemberitahuan untuk keluaran terminal baru, untuk akhir keluaran terminal. Ini dapat berfungsi untuk beberapa proses. Cara bekerja untuk semua proses adalah apa yang saya sarankan. Pesan "end-of-my-process" bisa berupa string unik apa pun. Unikkan sedemikian rupa sehingga tidak akan dicetak oleh proses Anda. Secara harfiah bisa berupa teks "akhir proses saya". Anda harus memasukkan string yang sama persis dalam definisi pemicu dan melampirkan pemberitahuan padanya. Saya tidak tahu apakah ini akan berfungsi dengan prompt shell. Anda harus mencobanya sendiri.
baf
Ah, saya salah paham, saya mengerti sekarang. Saya bisa mendapatkan peringatan untuk muncul dengan output echo "end-of-my-process". Namun, saya juga mendapat peringatan ketika saya benar-benar mengeluarkan perintah echo sebelum proses dimulai. Bagaimana saya memberitahu iTerm untuk mengabaikan string ketika saya benar-benar mengeluarkan perintah dan hanya melihat string yang digema? Dari file bantuan saya mencoba mempersiapkan pemicu regex dengan \ 0 ("Seluruh nilai cocok dengan ekspresi reguler.") Tetapi masih mengeksekusi pemicu dua kali.
truth1ness
@ truth1ness Jadilah kreatif, misalnya gunakan echo "end-of-""my-process" dengan tanda kutip di dalamnya. Ini akan cocok dengan teks "end-of-my-process" hanya ketika proses selesai.
baf
9

Ada alat OSS yang disebut noti .

Anda dapat dengan mudah menginstalnya brew install notidan mulai menggunakannya hanya dengan mengawali perintah Anda dengan notilike noti sleep 3.

junjian.xu
sumber
3

Anda juga dapat menggunakan terminal-notifieryang menggunakan pemberitahuan sistem mac os. Untuk menginstalnya melalui Home brew:

$ brew install terminal-notifier

Kemudian jika Anda ingin menampilkan notifikasi ketika pekerjaan / proses Anda selesai gunakan sesuatu seperti ini

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

Dan tampilan ini seperti ini:

masukkan deskripsi gambar di sini

Anda juga dapat mengubah suara dan ikon notifikasi. Info lebih lanjut di repo github: https://github.com/julienXX/terminal-notifier

MaSza
sumber
1

Instal integrasi shell iTerm2

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

Jalankan perintah Anda dan gabungkan aplikasi perhatian, misalnya

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

Ini akan menyebabkan aplikasi iTerm memantulkan ikonnya setelah pekerjaan selesai.

Anda juga memiliki opsi perhatian lain:

$ .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
Leonardo
sumber