Come posso fare in modo che il terminale iTerm mi avvisi quando un lavoro / processo è completo?


105

Una notifica del centro notifiche sarebbe l'ideale, ma anche ringhio, dock di rimbalzo, suono, ecc. Andrebbero bene (o se questo può essere fatto solo in Terminal.app sarei disposto a tornare indietro). C'è un'opzione da qualche parte in iTerm per attivare le notifiche o è qualcosa che dovrei digitare alla fine di un comando nel terminale? In quest'ultimo caso, è possibile aggiungere un avviso una volta avviato il processo (ad esempio, se mi rendo conto che ci vorrà più tempo di quanto inizialmente previsto, non riesco a indovinare).

Risposte:


197

Notifica su un processo già in esecuzione

Scorciatoia: Ao:

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

Occhio spettrale!: iTermmanterrà letteralmente un occhio (nell'angolo in alto a destra) del tuo terminale. Una volta terminato il comando, contatterà il Notification Center.

Perché?

Abbiamo già lanciato il comando. Abbiamo sottovalutato il tempo necessario per il completamento, non vogliamo cancellarlo e ci rifiutiamo di sederci e guardarlo. es. brew updatedopo molto tempo!

Requisiti

iTerm: integrazione della shell:

iTerm2 -> Install Shell Integration

Si noti che l'integrazione non mostrerà le notifiche fino al riavvio di iTerm2.


11
Dopo aver installato le integrazioni di shell potresti voler andare su iTerm2 -> Preferenze -> Profili -> Terminale, scorri verso il basso e deseleziona "Mostra indicatori di contrassegno", non mi è piaciuta questa integrazione di shell. Potresti anche voler modificare -> Contrassegni e annotazioni -> Avvisi -> Pubblica notifica se desideri le notifiche del sistema operativo invece di un popup in stile avviso.
Charles L.

@simonhamp Suggerisco di utilizzare i trigger ( iterm2.com/documentation-triggers.html ) per le sessioni sepolte
phirschybar

3
@dwanderson L'hai mai fatto funzionare con tmux? Questo sarebbe così utile
Lucas

@ Lucas c'è una riga nei documenti che dice che l'integrazione della shell non funziona con tmux o screen iterm2.com/documentation-shell-integration.html
Rich Stone

2
Questo occhio mi spaventa !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS

42

È possibile aggiungere uno qualsiasi dei seguenti dopo qualsiasi comando, con un punto e virgola tra il comando e esso:

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

osascript -e 'beep 3'

tput bel

oppure, se ti piace Notification Center

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

Puoi anche creare un alias nel tuo profilo, chiamarlo notifye aggiungerlo alla fine del tuo comando. Quindi, nel tuo profilo di accesso

alias notify="tput bel"

poi

sleep 10; notify

Oppure, se hai avviato il comando ed è "sospeso", digita notifye premi Entere verrà eseguito il tuo notifyalias alla fine, quando il comando è terminato, ad es.

sleep 20

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

Hmm, con questo comando osascript -e 'display notification "Task finished" with title "Terminal"'mi sembra di ottenere questo errore2015-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

seconda parte dell'errore/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

Utilizzi un sistema più vecchio di Mavericks o Yosemite?
Mark Setchell

No, Yosemite 10.10.3
truth1ness

Oh, è strano. Puoi provare qualcosa di più semplice come osascript -e 'display notification "Hello"'- copiando e incollando specificamente da qui.
Mark Setchell

33

E puoi sempre usare il saycomando.

Di solito quando esegui un lungo processo all'interno del terminale e vuoi essere aggiornato puoi semplicemente usare questo comando per pronunciare cose come doneo erroro bazinga.

mvn clean install; say done 

Questo comando crea un'app java spring e richiede molto tempo e verrà pronunciato al donetermine del processo.


16

iTerm2supporta le Growlnotifiche. Puoi attivarlo nelle impostazioni di ogni profilo.

Seleziona un profilo in Preferences…-> Profiles. Quindi nella Terminalscheda c'è un'opzione Enable Growl Notifications.

Ricorda di abilitare anche le iTermnotifiche nelle Growlpreferenze.

Se desideri ricevere una notifica per un determinato processo, potresti provare a sperimentare Triggers. I trigger vengono definiti nella Advancedscheda nelle impostazioni del profilo. In questo modo puoi assegnare una notifica Growl a un particolare output del tuo processo (regexp).

Ad esempio potresti fare:

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

E collega il trigger al messaggio "end-of-my-process".

Aggiornare

Maggiori informazioni sui trigger su iTerm2.com .


Quindi ho ragione sul fatto che non esiste un modo globale per ricevere un avviso per qualsiasi processo finito perché ho bisogno di eseguire lo script una volta per sapere cosa scrive alla fine del processo (e devo crearne uno per ogni script che eseguo )? Ad esempio, l'ultima riga per un processo youtube-dl è [download] 100% of 40.13MiB in 00:13ma questa riga viene ripetuta per ogni file che finisce. Cosa metterei per la mia stringa "end-of-my-process"? Posso fare un trigger per quando il mio prompt della shell predefinito viene ~ >visualizzato di nuovo?
truth1ness

@ truth1ness Non credo che ci sia un modo generico per essere informati sul processo finito. iTerminvia notifiche per il nuovo output del terminale, per la fine dell'output del terminale. Questo può funzionare per alcuni processi. Il modo di lavorare per tutti i processi è quello che ho suggerito. Il messaggio "end-of-my-process" può essere qualsiasi stringa univoca. Unico in modo tale da non essere stampato dal tuo processo. Potrebbe essere letteralmente il testo di "fine del mio processo". È necessario immettere esattamente la stessa stringa nella definizione del trigger e allegarvi una notifica. Non so se funzionerà con il prompt della shell. Devi provare tu stesso.
baf

Ah, ho capito male, ora ho capito. Sono stato in grado di visualizzare un avviso con l'output di eco "end-of-my-process". Tuttavia, ricevo un avviso anche quando eseguo effettivamente il comando echo prima dell'avvio del processo. Come direi a iTerm di ignorare la stringa quando in realtà emetto il comando e guardo solo la stringa echo? Dal file della guida ho provato ad anteporre all'espressione regolare trigger \ 0 ("L'intero valore corrispondente all'espressione regolare.") Ma esegue comunque il trigger due volte.
truth1ness

@ truth1ness Sii creativo, ad esempio usa echo "end-of-""my-process" con virgolette all'interno. Corrisponderà al testo "end-of-my-process" solo al termine del processo.
baf

9

C'è uno strumento OSS chiamato noti .

Puoi installarlo facilmente con brew install notie iniziare a usarlo semplicemente anteponendo il tuo comando con notilike noti sleep 3.


3

Puoi anche utilizzare le terminal-notifiernotifiche di sistema di mac os. Per installarlo tramite Home brew basta:

$ brew install terminal-notifier

Quindi, se vuoi visualizzare una notifica quando il tuo lavoro / processo è finito, usa qualcosa di simile

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

E questo display come questo:

inserisci qui la descrizione dell'immagine

Puoi anche modificare il suono e l'icona delle notifiche. Maggiori informazioni nel repository github: https://github.com/julienXX/terminal-notifier


1

Installa l'integrazione della shell iTerm2

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

Esegui il tuo comando e concatena l'app di attenzione, ad es

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

Una volta completato il lavoro, l'app iTerm farà rimbalzare la sua icona.

Hai anche altre opzioni di attenzione:

$ .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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.