Comment faire pour que le terminal iTerm me prévienne lorsqu'un travail / processus est terminé?

106

Une notification du centre de notification serait idéale, mais grogner, bounce dock, son, etc. serait bien aussi (ou si cela ne peut être fait que dans Terminal.app, je serais prêt à revenir en arrière). Y a-t-il une option quelque part dans iTerm pour activer les notifications ou est-ce quelque chose que je suis censé taper à la fin d'une commande dans le terminal? Dans ce dernier cas, est-il possible d'ajouter une alerte une fois que le processus a commencé (par exemple si je me rends compte que cela va prendre plus de temps que prévu initialement, je ne sais pas trop).

vérité
la source

Réponses:

198

Notifier sur un processus déjà en cours

Raccourci: Aou:

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

Oeil effrayant!: iTermgardera littéralement un œil (dans le coin supérieur droit) de votre terminal. Une fois la commande terminée, il contactera le Notification Center.

Pourquoi?

Nous avons déjà lancé la commande. Nous avons sous-estimé le temps nécessaire pour l'achèvement, nous ne voulons pas l'annuler et nous refusons de nous asseoir et de le regarder. par exemple un brew updateaprès une longue période!

Exigences

iTerm: Intégration Shell:

iTerm2 -> Install Shell Integration

Notez que l'intégration n'affichera pas de notifications tant qu'iTerm2 ne sera pas redémarré.

Paschalis
la source
11
Après avoir installé les intégrations de shell, vous voudrez peut-être aller dans iTerm2 -> Préférences -> Profils -> Terminal, faites défiler vers le bas et décochez "Afficher les indicateurs de marque", je n'ai pas aimé cette intégration de shell. Vous voudrez peut-être également Modifier -> Marques et annotations -> Alertes -> Publier une notification si vous voulez les notifications du système d'exploitation au lieu d'une fenêtre contextuelle de style d'alerte.
Charles L.
@simonhamp Je suggère d'utiliser des déclencheurs ( iterm2.com/documentation-triggers.html ) pour les sessions enterrées
phirschybar
3
@dwanderson Avez-vous déjà fait fonctionner cela avec tmux? Ce serait si utile
Lucas
@Lucas, il y a une ligne dans la documentation qui dit que l'intégration du shell ne fonctionne pas avec tmux ou screen iterm2.com/documentation-shell-integration.html
Rich Stone
2
Cet œil me fait peur !! (╯ ‵ □ ′) ╯︵┻━┻
WTIFS
42

Vous pouvez ajouter l'un des éléments suivants après n'importe quelle commande, avec un point-virgule entre la commande et celle-ci:

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

osascript -e 'beep 3'

tput bel

ou, si vous aimez le centre de notifications

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

Vous pouvez également créer un alias dans votre profil, appelé notifyet l'ajouter à la fin de votre commande. Donc, dans votre profil de connexion

alias notify="tput bel"

puis

sleep 10; notify

Ou, si vous avez commencé votre commande et qu'elle est "suspendue", tapez simplement notifyet appuyez sur Enteret il exécutera votre notifyalias à la fin, lorsque la commande est terminée, par exemple

sleep 20

# wait 5 seconds before realising this will take 20 seconds
notify<Enter>
Mark Setchell
la source
Hmm, avec cette commande, osascript -e 'display notification "Task finished" with title "Terminal"'il semble que je 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:
reçoive
deuxième partie de l'erreur/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.
vérité1ness
Êtes-vous sur un système plus ancien que Mavericks ou Yosemite?
Mark Setchell
Non, Yosemite 10.10.3
vérité1ness
Oh, c'est bizarre. Pouvez-vous essayer quelque chose de plus simple comme osascript -e 'display notification "Hello"'- en copiant et en collant spécifiquement à partir d'ici.
Mark Setchell
33

Et vous pouvez toujours utiliser la saycommande.

Habituellement, lorsque vous exécutez un long processus à l'intérieur du terminal et que vous souhaitez être mis à jour, vous pouvez simplement utiliser cette commande pour dire des choses comme doneou errorou bazinga.

mvn clean install; say done 

Cette commande crée une application java spring, et prend beaucoup de temps, et elle s'exprimera une donefois le processus terminé.

Farhan Salam
la source
16

iTerm2prend en charge les Growlnotifications. Vous pouvez l'activer dans les paramètres de chaque profil.

Sélectionnez un profil dans Preferences…-> Profiles. Ensuite, dans l' Terminalonglet, il y a une option Enable Growl Notifications.

N'oubliez pas d'activer également les iTermnotifications dans les Growlpréférences.

Si vous souhaitez recevoir une notification pour un processus donné, vous pouvez essayer Triggers. Vous définissez les déclencheurs dans l' Advancedonglet dans les paramètres d'un profil. De cette façon, vous pouvez attribuer une notification Growl à une sortie particulière de votre processus (regexp).

Vous pourriez par exemple faire:

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

Et connectez le déclencheur au message «end-of-my-process».

Mettre à jour

En savoir plus sur les déclencheurs sur iTerm2.com .

baf
la source
Donc, ai-je raison de dire qu'il n'y a pas de moyen global d'obtenir une alerte pour tout processus terminé parce que j'ai besoin d'avoir exécuté le script une fois pour savoir ce qu'il écrit à la fin du processus (et je dois en créer un pour chaque script que j'exécute )? Par exemple, la dernière ligne d'un processus youtube-dl est [download] 100% of 40.13MiB in 00:13mais cette ligne est répétée pour chaque fichier terminé. Que dois-je mettre pour ma chaîne «end-of-my-process»? Puis-je créer un déclencheur pour le moment où mon invite de shell par défaut réapparaît ~ >?
vérité1ness
@ vérité1ness Je ne pense pas qu'il existe un moyen générique d'être informé du processus terminé. iTermenvoie des notifications pour la nouvelle sortie du terminal, pour la fin de la sortie du terminal. Cela peut fonctionner pour certains processus. La manière de travailler pour tous les processus est ce que j'ai suggéré. Le message "end-of-my-process" peut être n'importe quelle chaîne unique. Unique de telle manière qu'il ne sera pas imprimé par votre processus. Peut être littéralement du texte "fin de mon processus". Vous devez entrer exactement la même chaîne dans la définition du déclencheur et y attacher une notification. Je ne sais pas si cela fonctionnera avec l'invite du shell. Vous devez l'essayer vous-même.
baf
Ah, j'ai mal compris, je l'ai maintenant. J'ai pu obtenir une alerte pour apparaître avec la sortie d'écho "end-of-my-process". Cependant, je reçois également une alerte lorsque j'émets la commande echo avant le début du processus. Comment pourrais-je dire à iTerm d'ignorer la chaîne lorsque j'émets la commande et que je ne regarde que la chaîne écho? Depuis le fichier d'aide, j'ai essayé de faire précéder le trigger regex avec \ 0 ("La valeur entière correspond à l'expression régulière.") Mais il exécute toujours le déclencheur deux fois.
vérité1ness
@ vérité1ness Soyez créatif, utilisez echo "end-of-""my-process" par exemple avec des guillemets à l'intérieur. Il correspondra au texte "fin de mon processus" uniquement lorsque le processus est terminé.
baf
9

Il existe un outil OSS appelé noti .

Vous pouvez facilement l'installer avec brew install notiet commencer à l'utiliser simplement en préfixant votre commande avec notilike noti sleep 3.

junjian.xu
la source
3

Vous pouvez également utiliser les terminal-notifiernotifications système Mac OS. Pour l'installer via Home brew simplement:

$ brew install terminal-notifier

Ensuite, si vous souhaitez afficher une notification lorsque votre travail / processus est terminé, utilisez quelque chose comme ça

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

Et cet affichage comme ceci:

entrez la description de l'image ici

Vous pouvez également modifier le son et l'icône des notifications. Plus d'informations dans le dépôt github: https://github.com/julienXX/terminal-notifier

MaSza
la source
1

Installez l'intégration du shell iTerm2

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

Exécutez votre commande et concaténez l'application d'attention, par exemple

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

Cela fera rebondir son icône sur l'application iTerm une fois le travail terminé.

Vous avez également d'autres options d'attention:

$ .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
Léonard
la source