Comment recevoir une notification lorsque mes commandes sont terminées

Amir Afghani

Comment recevoir une notification lorsque mes commandes sont terminées


J’exécute une série de commandes sur la ligne de commande qui prend environ vingt minutes. Je voudrais voir une sorte de notification sur mon Mac lorsque celles-ci sont terminées, je n’ai donc pas besoin de surveiller le terminal pour la fin. Y a-t-il un moyen de faire cela?

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

Modifier :

Je pourrais utiliser xclock mais cela ressemble à un hack. Idéalement, je pourrais envoyer la notification n’importe où, comme mon téléphone, mon écran, etc.

jsbillings

growl.info Growl est le programme auquel fait référence @mattdm.

Réponses


 Eugene Bujak

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

bmike ♦

Ceci est un merveilleux exemple d’utilisation des opérateurs shell && pour enchaîner plusieurs commandes et les boucler avec un collectif || ou une instruction pour générer une erreur. +1 en effet

wrtsprt

Agréable! Cependant, pour pouvoir le faire rapidement, j’abandonne les informations d’erreur et de réussite et j’ai ajouté un alias global à mon zsh: alias -g sd='; say done' alias -g sd='; say done' . Cela signifie que je n’ai qu’à ajouter sd à n’importe quelle commande et je serai averti.

Marco Prins

joli. et maintenant j’ai quelque chose à jouer

AlikElzin-kilaka

Essayé et à la fois fait et erreur sont toujours dit 🙁 Exemple: (echo alik && echo Orly && say done) || say error

Siddhartha

Très utile. J’ai fait écho avec say -v Zarvox qui fait sauter tout le monde dans le voisinage, c’est une notification légèrement moins alarmante.


 Tom Crockett

Dans Mac OS 10.8, vous pouvez vous envoyer des messages Notification Center (similaires à Growl mais intégrés à Mac OS). Consultez cette page pour voir comment installer une gemme Ruby qui vous permettra d’envoyer des notifications à partir de la ligne de commande. Pour simplifier l’utilisation courante du simple fait de se soucier du fait que quelque chose dans le terminal est en cours, ajoutez un alias à votre .bash_profile, par exemple

 alias notifyDone = 'terminal-notifier -title "Terminal" -message "Done with task!"' 

Ensuite, vous pouvez simplement faire

 $ < long - running task >   ;  notifyDone 

Une fois la tâche de longue durée terminée, vous obtiendrez une belle fenêtre modale qui persiste jusqu’à ce que vous cliquiez dessus:

Fenêtre contextuelle du centre de notifications

Pwdr

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).

aheuermann

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

SexyBeast

Super solution! Soit dit en passant, cela ne produit aucun son comme les autres notifications OS X. Une solution pour ça?

Tom Crockett

@Cupidvogel, vous pouvez simplement ajouter une commande say , par exemple my command ; terminal-notifier -message 'finished' ; say finished my command ; terminal-notifier -message 'finished' ; say finished

Joshua Goldberg

Diverses réponses à cette question donnent beaucoup plus de détails: apple.stackexchange.com/questions/57412/…


 Loïc Wolff

Utilisez Growl .

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

 growlnotify -- sticky -- appIcon < icon >   -- message < message >   - t < title > 

pour afficher un popup, comme ça:

grognement

Ian C. ♦

J’utilise presque cette approche exacte mais j’étends Growl avec Prowl afin que Growl puisse envoyer la notification à mon iPhone.

Tom Crockett

Le centre de notification de Mountain Lion rend Growl inutile … voir ma réponse pour savoir comment l’utiliser pour cela.


 Chris Page

Depuis Mac OS X Lion 10.7, Terminal dispose de nouveaux indicateurs d’état pour résoudre des problèmes comme celui-ci:

Dans les onglets:

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

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

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

Dans les icônes du Dock de la fenêtre réduite:

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

  • Non lu: le texte non lu est indiqué par des points de suspension.

  • Les fenêtres de terminal réduites affichent le 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 fait le terminal, si la sortie que vous recherchez est identifiable (par exemple, un affichage « supérieur » est assez facile à reconnaître même à de petites tailles). Ceci est particulièrement utile lorsque le grossissement du Dock est activé ou que vous avez de la place pour un grand Dock.

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

  • Afficher un grand astérisque: banner *

  • Inversez l’affichage: printf 'e[?5h'

  • Peignez l’affichage en rouge: tput setab 1; tput clear tput setab 1; tput clear

  • Asseyez-vous en boucle, en faisant clignoter l’écran: while true; do printf 'e[?5h'; sleep 1; printf 'e[?5l'; sleep 1; done 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 pouvez agrandir la fenêtre du terminal, par exemple:

 printf 'e[9;1t' 

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

Une autre approche consiste à utiliser AppleScript pour afficher une alerte dans une fenêtre distincte:

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

bmike ♦

Excellente utilisation de tput et de séquences d’échappement – vous avez tout sauf un message de défilement dans la barre de titre!


 Austin Lucas

Je sais que je suis en retard à la question, mais je pense qu’il manque une petite pièce qui pourrait être utile. J’ai trouvé que, même si c’est bien, avoir votre terminal parler avec vous n’est pas exactement fonctionnel. Ce qui est mieux, c’est quelque chose de plus subtil comme ceci:

http://i.stack.imgur.com/FaZmF.png

Comme l’a souligné Chris, Lion a ajouté de petits badges de notification lorsqu’un BEL est lancé. Vous pouvez le lancer vous-même avec la commande:

 tput bel 

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

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

Cela exécute la commande ping en tant que tâche d’arrière-plan (la suspension et accomplit cela) et lui fait lancer une alerte simple lorsqu’elle se termine. Historiquement, BEL a été utilisé pour faire ce [horrible] bip matériel, mais Lion l’a remplacé avec goût par l’effet sonore « commande invalide », un badge de notification et l’icône du terminal qui rebondit deux fois sur le dock.

user495470

printf 'a' serait équivalent à tput bel . Notez que Terminal ne fait pas rebondir l’icône Dock si l’onglet qui a provoqué l’alerte est actuellement actif.


 mst

Vous pouvez également utiliser la commande build in say pour la notification, par exemple: say « ant: build: done ». Voir: l’homme dit dans le terminal.


 Kevin Reid

Je présente dans cette réponse deux choses:

  • La possibilité d’utiliser afplay , qui lit des fichiers audio , pour la notification.
  • mes outils pour signaler l’état de sortie avec la notification.

J’ai ce script, ~/bin/donebeep :

 #!/bin/bash 
 if   [   "[email protected]"   =   0   ];   then afplay - v 2   / System / Library / Sounds / Blow . aiff & 
 else afplay - v 2   / System / Library / Sounds / Sosumi . aiff & 
 fi 

Cela joue un son différent selon que l’argument est 0. Ensuite, j’ai un alias:

 alias donebeep = '(savestatus=$?; ~/bin/donebeep $savestatus "[email protected]"; exit $savestatus)' 

(Qu’ils portent le même nom est sans importance et probablement une mauvaise idée.)

Pour l’utiliser dans votre exemple, svn update . && ant clean build start; donebeep svn update . && ant clean build start; donebeep svn update . && ant clean build start; donebeep . Notez que j’utilise ; plutôt que && , afin qu’il puisse m’informer de l’échec ainsi que du succès.

Avant d’ apprendre sur afplay , j’utilisais plutôt des messages say to speak. Le rôle de donebeep été joué par ce script:

 #!/bin/bash say - v Bruce   "Done $(basename " $ ( pwd ) "), [email protected]"   & 

Ce script prononce le code de sortie directement au lieu d’avoir deux messages différents. Il mentionne également le nom du répertoire courant (pour aider à clarifier quelle tâche est effectuée), et peut recevoir du texte supplémentaire à dire en passant des paramètres à l’alias (c’est pourquoi l’alias contient "[email protected]" ). Notez la fin & afin que vous n’ayez pas besoin d’attendre la fin du discours avant d’obtenir une invite.


La page de afplay pour afplay est incomplète; afplay -h répertorie toutes les options:

 Usage : afplay [ option ...]  audio_file Options :   ( may appear before or after arguments ) 
   {- v |   -- volume }  VOLUME set  the volume for  playback of the file {- h |   -- help } print help {   -- leaks } run leaks analysis {- t |   -- time }  TIME play for  TIME seconds {- r |   -- rate }  RATE play at playback rate {- q |   -- rQuality }  QUALITY set  the quality used for  rate - scaled playback ( default is 0   -  low quality ,   1   -  high quality ) 
   {- d |   -- debug } debug print output 


 Viktor Fröberg

Je crée un outil simple qui fait exactement cela. https://github.com/vikfroberg/brb

Installation

Node.js doit être installé: http://nodejs.org

 $ npm install - g brb 

Instructions

 $ sleep 3 ;  brb 


 Daniel Schep

J’ai écrit ntfy exactement dans ce but. Il est multiplateforme et peut envoyer automatiquement des notifications lorsque les commandes de longue durée se terminent.

Si vous avez le pip de Python (la plupart des distributions Linux et MacOS l’ont), voici comment l’installer et activer les notifications automatiques:

 $ sudo pip install ntfy $ echo 'eval "$(ntfy shell-integration)"'   >>   ~/. bashrc $ # restart your shell 

Découvrez-le sur http://ntfy.rtfd.io

En plus de cela, il peut également:

  • supprimer les notifications automatiques lorsque le terminal est au premier plan (X11, iTerm2 & Terminal.app pris en charge et activé par défaut)
  • envoyer des notifications basées sur le cloud (Pushover, Pushbullet et XMPP)
  • être utilisé pour envoyer des notifications à la fin d’un processus (pas le support automatique susmentionné)
  • envoyer manuellement des notifications (bon pour une utilisation dans les scripts!)


 Dustin Kirkland

Ubuntu fournit l’alias suivant dans ~ / .bashrc:

 alias alert = 'notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e ' ' 's/^s*[0-9]+s*//;s/[;&|]s*alert$//' ' ')"' 

Avec cela, vous pouvez alors faire des choses comme:

 make ;  alert sleep 10 ;  alert 

Peut-être y a-t-il un équivalent pour notify-send dans Mac OSX? J’ai vu des fenêtres contextuelles similaires dans Mac et Ubuntu.

Daniel Beck

Vous êtes sur le site Apple. Pour en faire une réponse, veuillez expliquer comment obtenir notify-send sur Mac OS X.

allyourcode

Je suis d’accord que c’est un peu inapproprié, mais j’ai trouvé cela utile. Je suis venu à cette question de Google, et ma question d’origine n’était pas spécifique à Mac. Comme l’affiche originale, je veux un moyen de ne pas avoir à surveiller mon terminal lors de l’exécution d’une commande qui prend beaucoup de temps; Il se trouve que j’utilise Ubuntu: /


 Sherwood Botsford

Mon problème avec les sons et les fenêtres modales est que je ne peux pas dire d’où ils viennent. Je travaille actuellement avec un tas d’espaces, et parfois plus de 20 fenêtres de terminal.

Ma solution est portable du côté unix et devrait fonctionner avec tout ce qui prend en charge les séquences d’échappement ansi. Cette solution fonctionne avec Snow Leopard et fonctionnera probablement avec des versions plus anciennes du terminal.

Ligne unique dans .bash_profile

 function  watch {  $ *   ;  echo - n - e "33[41m"   ;  echo $ *  DONE ;  date ;  echo - n - e "33[0m"   ;   } 

Décomposer cela:

 $ *  expands to the original command I want to watch . first escape sequence changes background color to red echo repeats the command ( with red background ,  the word DONE . 
 Running   Date  tells you when it finished . last escape resets the terminal to what it was . 

Si vous n’aimez pas le rouge, la couleur d’arrière-plan des codes d’échappement google ascii. Notez que cela ne change pas tout l’écran en rouge, mais juste tout ce qui sort après la fin de la commande.


 Akash Agarwal

J’ai fait un script pour résoudre ce problème qui est ici . Vous n’avez pas besoin de logiciel supplémentaire pour cela. Installation:
brew install akashaggarwal7/tools/tsay
Usage:
sleep 5; tsay

N’hésitez pas à contribuer!

Akash Agarwal

Raison du downvote?


 aléatoire

Voici ma fonction bash (placez-la n’importe où dans votre ~/.bashrc ou ~/.zshrc :

 watch (){ cmd = [email protected] # Somehow interpolate [email protected] directly doesn't work. [email protected] &&  say 'Watch Completed!'   &&  osascript - e "display notification "Completed: $cmd" with title "Watch Alert"" 
 } 

Pour l’utiliser: watch echo 'hi there'

Vous pouvez également personnaliser le son de notification comme indiqué ici: https://apple.stackexchange.com/a/115373/9622

 

#(une, commandes, comment, lorsque, mes, notification, recevoir, sont, terminées

 

wiki

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *