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.

11voto

jchook Points 161

Vous pouvez utiliser la commande intégrée osascript pour exécuter un Apple Script qui affiche une notification, par exemple.

osascript -e 'display notification "Commande terminée" with title "Votre titre ici"'

Vous pouvez le combiner avec un simple point-virgule, par exemple.

votre-commande ; osascript -e '....'

8voto

Kevin Reid Points 1657

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

  • L'option d'utiliser afplay, qui lit des fichiers sonores, pour la notification.
  • Mes outils pour rapporter l'état de sortie ainsi que la notification.

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

#!/bin/bash
if [ "$@" = 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 en fonction de l'argument donné. Ensuite, j'ai un alias:

alias donebeep='(savestatus=$?; ~/bin/donebeep $savestatus "$@"; exit $savestatus)'

(Le fait qu'ils aient 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. Notez que j'utilise ; plutôt que &&, pour qu'il puisse me notifier en cas d'échec ainsi que de succès.

Avant d'avoir appris à utiliser afplay, j'utilisais say pour parler des messages à la place. Le rôle de donebeep était joué par ce script:

#!/bin/bash
say -v Bruce "Terminé $(basename "$(pwd)"), $@." &

Ce script prononce directement le code de sortie au lieu d'avoir deux messages différents. Il mentionne également le nom du répertoire actuel (pour clarifier quelle tâche est terminée), et peut recevoir du texte supplémentaire à dire en passant des paramètres à l'alias (c'est pourquoi l'alias a "$@" dedans). Remarquez le & à la fin pour ne pas avoir à attendre la fin du discours avant d'obtenir un invite de commande.


La page de manuel de afplay est incomplète; afplay -h liste toutes les options:

Usage:
afplay [option...] audio_file

Options: (peuvent apparaître avant ou après les arguments)
  {-v | --volume} VOLUME
    définir le volume pour la lecture du fichier
  {-h | --help}
    afficher l'aide
  { --leaks}
    lancer l'analyse des fuites  {-t | --time} TIME
    jouer pendant TIME secondes
  {-r | --rate} RATE
    jouer à la vitesse de lecture
  {-q | --rQuality} QUALITY
    définir la qualité utilisée pour la lecture à vitesse ajustée (par défaut 0 - basse qualité, 1 - haute qualité)
  {-d | --debug}
    afficher la sortie de débogage

0 votes

Ne pouvez-vous pas changer le script pour se terminer par & exit $@ au lieu de faire en sorte que l'alias le fasse?

5voto

Frep D-Oronge Points 1250

Vous pouvez également utiliser la commande d'annonce intégrée pour la notification, par exemple: dire "ant: build: done." Voir: man dire dans le terminal.

4voto

signal Points 6

J'ai écrit ntfy précisément à cette fin. Il est multiplateforme et peut envoyer des notifications automatiquement lorsque des commandes longues se terminent.

Si vous avez 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
$ # redémarrez votre shell

Jetez-y un œil sur http://ntfy.rtfd.io

En plus de cela, il peut également :

  • supprimer les notifications automatiques lorsque le terminal est au premier plan (prise en charge de X11, iTerm2 & Terminal.app activée par défaut)
  • envoyer des notifications basées sur le cloud (Pushover, Pushbullet et XMPP)
  • être utilisé pour envoyer des notifications lorsque un processus se termine (pas le support automatique mentionné ci-dessus)
  • envoyer manuellement des notifications (utile pour une utilisation dans les scripts!)

3voto

Viktor Fröberg Points 39

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

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