90 votes

Comment recevoir une notification lorsque mes commandes sont terminées

Je lance une série de commandes sur la ligne de commande qui prend environ vingt minutes pour se terminer. J'aimerais voir une sorte de notification sur mon Mac lorsque celles-ci sont terminées afin de ne pas avoir à surveiller le terminal. Y a-t-il un moyen de faire cela?

$ svn update . && ant clean build start && *notify_me_somehow*

Éditer:

Je pourrais utiliser xclock mais cela semble être une astuce. Idéalement, je pourrais envoyer la notification n'importe où, comme sur mon téléphone, mon écran, etc.

85voto

Eugene Bujak Points 1485

(svn update . && ant clean build start && say done) || say error

3 votes

Il s'agit d'un exemple merveilleux d'utilisation des opérateurs de shell && pour enchaîner plusieurs commandes et les regrouper avec l'opérateur collectif || pour provoquer une erreur. +1 en effet

4 votes

Bien! Pour pouvoir le faire rapidement cependant, je renonce aux informations d'erreur vs. succès et j'ai ajouté un alias global à mon zsh : alias -g sd='; say done'. Cela signifie que je n'ai qu'à ajouter sd à n'importe quelle commande, et je serai notifié.

0 votes

Joli. et maintenant j'ai quelque chose avec quoi jouer

79voto

Tom Crockett Points 1044

Sous Mac OS 10.8 et plus, vous pouvez vous envoyer des messages dans le Centre de notifications. Il y a un outil appelé terminal-notifier que vous pouvez télécharger ou installer en utilisant Homebrew ou Rubygems, par exemple :

brew install terminal-notifier

Consultez https://github.com/julienXX/terminal-notifier pour en savoir plus sur cet outil.

Pour simplifier le cas d'utilisation courant qui consiste simplement à se préoccuper du fait de quelque chose étant fait dans le terminal, ajoutez un alias à votre .bash_profile :

alias notifyDone='terminal-notifier -title "Terminal" -message "Terminé avec la tâche ! Code de sortie : $?"' -activate com.apple.Terminal

Ou, en incorporant la réponse d'Austin Lucas, vous pouvez ajouter un son et un badge d'icône avec tput bel :

alias notifyDone='tput bel; terminal-notifier -title "Terminal" -message "Terminé avec la tâche ! Code de sortie : $?"' -activate com.apple.Terminal

Ensuite, vous pouvez simplement faire :

$  ; notifyDone

Une fois la tâche de longue durée terminée, vous recevrez une belle fenêtre contextuelle :

Fenêtre contextuelle du Centre de notifications

Lorsque vous cliquez sur la notification, elle activera le Terminal. Si vous allez dans Préférences Système > Notifications > terminal-notifier et changez le style d'alerte en "Alertes", la notification persistera jusqu'à ce que vous la dismissiez.

14 votes

terminal-notifier peut également être installé via homebrew : brew install terminal-notifier. Ensuite, vous pouvez simplement écrire myCommand && terminal-notifier -message 'finished'. Testé sur OS X Yosemite (10.10.1).

7 votes

Vous devriez exécuter myCommand; terminal-notifier -message 'finished' sinon la notification ne sera pas affichée si myCommand échoue.

1 votes

Super solution! Au fait, cela ne produit aucun son comme les autres notifications de OS X. Une solution pour cela?

23voto

JTew Points 1599

Je sais que je suis en retard pour la question mais je pense qu'il y a un petit élément manquant qui pourrait être utile. J'ai trouvé que, même si c'est sympa, avoir votre terminal qui vous parle n'est pas vraiment fonctionnel. Ce qui est mieux, c'est quelque chose de plus subtil comme ceci :

https://i.sstatic.net/FaZmF.png

Comme l'a souligné Chris, Lion a ajouté de petites notifications quand un BEL est lancé. Vous pouvez le lancer vous-même avec la commande :

tput bel

Ainsi, si vous travaillez en arrière-plan et que vous voulez une notification quand cela se termine, vous pouvez essayer quelque chose comme ceci:

ping -c 5 www.google.com && tput bel &

Cela exécute la commande ping comme une tâche en arrière-plan (le & en suspens permet cela) et lance une simple alerte quand elle se termine. Historiquement, BEL a été utilisé pour produire ce [horrible] bip matériel, cependant Lion l'a remplacé avec goût par l'effet sonore de "commande invalide", un badge de notification, et l'icône du terminal rebondissant deux fois dans le dock.

1 votes

printf '\a' serait équivalent à tput bel. Notez que le Terminal ne fait pas rebondir l'icône du Dock si l'onglet ayant déclenché l'alerte est actuellement actif.

0 votes

C'est beau car cela ne nécessite pas l'installation d'un logiciel supplémentaire. iterm2 (et, selon la capture d'écran, également Terminal) envoient déjà une notification lorsque la cloche retentit et que l'écran est réduit.

22voto

Loïc Wolff Points 14389

Utilisez Growl.

Dans le fichier .dmg, cherchez les extras, il y a un binaire growlnotify. Installez-le, quelque part comme dans /usr/local/bin. Ensuite, vous pouvez utiliser cette commande

growlnotify --sticky --appIcon  --message  -t 
</code></pre>

<p>pour afficher une fenêtre contextuelle, comme celle-ci:</p>

<p><img src="https://i.sstatic.net/hU6hi.png" alt="growl"></p></x-turndown>

3 votes

Je utilise presque exactement cette approche mais j'étends Growl avec Prowl afin que Growl puisse pousser la notification vers mon iPhone.

3 votes

Le Centre de notifications du Mountain Lion rend Growl inutile... voir ma réponse pour savoir comment l'utiliser pour cela.

22voto

Chris Page Points 7394

À partir de Mac OS X Lion 10.7, Terminal a quelques nouveaux indicateurs d'état pour aider avec des problèmes comme celui-ci :

Dans les onglets :

  • Activité : un indicateur d'activité (indicateur de progression en rotation) est affiché lorsqu'il y a eu une sortie récente dans le terminal. Cela vous permet de voir s'il est actuellement occupé ou s'il a terminé un processus long. (Ou bien sûr, vous pouvez l'utiliser pour savoir quand il a commencé à produire une sortie après avoir travaillé silencieusement pendant un certain temps.)

  • Non lu : des points de suspension "…" sont affichés pour indiquer un nouveau texte non lu dans les onglets en arrière-plan. Lorsque vous sélectionnez l'onglet, l'indicateur est effacé.

  • Alerte : une "cloche" est affichée pour indiquer quand un BEL a été écrit dans les onglets ou fenêtres en arrière-plan. De plus, Terminal affiche un badge rouge sur l'icone de l'application, indiquant le nombre d'alertes/cloches "non lues" dans tous les terminaux. Si Terminal lui-même est en arrière-plan, il fait également rebondir son icône Dock lorsqu'une cloche est activée.

Dans les icônes Dock de fenêtres minimisées :

  • Activité : l'activité est indiquée en affichant le nom du processus au premier plan.

  • Non lu : un texte non lu est indiqué avec des points de suspension.

  • Les fenêtres de terminal minimisées affichent un contenu en direct dans leurs icônes Dock. Cela peut être utilisé pour voir s'il y a de l'activité, ou même pour déterminer ce que le terminal fait, si la sortie que vous recherchez est identifiable (par exemple, un affichage "top" est assez facile à reconnaître même à petite taille). Cela est particulièrement utile lorsque la magnification du Dock est activée ou que vous avez de la place pour un Dock large.

De plus, vous pourriez afficher quelque chose dans le terminal pour attirer votre attention (ce qui serait visible même dans les fenêtres minimisées). Par exemple :

  • Afficher un grand astérisque : banner \*

  • Inverser l'affichage : printf '\e[?5h'

  • Peindre l'affichage en rouge : tput setab 1; tput clear

  • Rester dans une boucle, clignotant l'écran : while true; do printf '\e[?5h'; sleep 1; printf '\e[?5l'; sleep 1; done

Il existe également des codes d'échappement pour manipuler les fenêtres (déplacer, définir la taille, zoomer, minimiser, etc.). Vous pourriez par exemple zoomer la fenêtre du Terminal :

printf '\e[9;1t'

Voir "manipulation de fenêtres" sur http://invisible-island.net/xterm/ctlseqs/ctlseqs.html pour plus de détails.

Une autre approche est d'utiliser AppleScript pour afficher une alerte dans une fenêtre séparée :

osascript -e 'tell app "System Events" to display alert "Build Completed" message "The checkout and build have completed."'

0 votes

Excellent utilisation de tput et des séquences d'échappement - vous avez tout sauf un message défilant dans la barre de titre!

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X