412 votes

Comment puis-je déclencher une notification du Centre de notification à partir d'un AppleScript ou d'un shell ?

J'aimerais pouvoir tirer parti des fonctionnalités du Centre de notification de 10.8 dans les AppleScripts et les scripts que j'écris.

Existe-t-il une commande intégrée ou une bibliothèque tierce que je peux utiliser à partir d'un AppleScript ou d'un shell script ?

Idéalement, le type et l'icône de la notification pourraient être contrôlés, mais même la possibilité de déclencher une bannière de base avec une icône standard (mais un texte personnalisé) serait appréciée.

0 votes

564voto

grg Points 181593

Avec Mavericks et les versions ultérieures, vous pouvez le faire à l'aide de la fonction "notification d'affichage" d'AppleScript :

display notification "Lorem ipsum dolor sit amet" with title "Title"

                          

C'est tout, c'est aussi simple que ça ! No 3 rd -Les bibliothèques ou applications tierces sont nécessaires et le logiciel est entièrement portable pour être utilisé sur d'autres systèmes. Notification 10.9 en haut, 10.10 DP au milieu, 10.10 en bas.

AppleScript peut être exécuté à partir du shell en utilisant /usr/bin/osascript :

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

Vous pouvez également personnaliser davantage l'alerte en ajoutant

  • un sous-titre

    Ajoutez 'sous-titre' suivi de la chaîne ou de la variable contenant le sous-titre.

    display notification "message" with title "title" subtitle "subtitle"

    L'exemple ci-dessus produit la notification suivante :

  • son

    Ajoutez "nom du son" suivi du nom d'un son qui sera joué avec la notification.

    display notification "message" sound name "Sound Name"

    Les noms de sons valides sont les noms des sons situés dans

    • ~/Library/Sounds
    • /System/Library/Sounds

Les notifications d'affichage peuvent être enveloppées comme un script en ligne de commande. Le code suivant peut être exécuté dans Terminal et ajoutera un script à /usr/local/bin (doit exister, ajouter à $PATH) appelé notify .

cd /usr/local/bin && echo -e "#!/bin/bash\n/usr/bin/osascript -e \"display notification \\\"\$*\\\"\"" > notify && chmod +x notify;cd -

C'est le script que le ci-dessus ajoutera à la notification.

#!/bin/bash
/usr/bin/osascript -e "display notification \"$*\""

Maintenant pour afficher une notification :

notify Lorem ipsum dolor sit amet
sleep 5; notify Slow command finished

0 votes

Quel est le chemin de display ? J'ai Mavericks mais je n'arrive pas à le trouver. Merci !

0 votes

@ceilingcat Pourriez-vous préciser ce que vous voulez dire ? Qu'est-ce qui ne fonctionne pas ?

0 votes

J'ai -bash: display: command not found Mon chemin est un peu détraqué, donc ce serait bien de savoir exactement où se trouve le chemin. display est situé.

115voto

Brant Bobby Points 4540

terminal-notifier

Dans le fichier README :

terminal-notifier est un outil en ligne de commande permettant d'envoyer des notifications aux utilisateurs de Mac OS X. Ces notifications sont disponibles dans Mac OS X 10 8. Notifications, qui sont disponibles dans Mac OS X 10.8.

Il est actuellement emballé comme un paquet d'applications, car NSUserNotification ne fonctionne pas à partir d'un "outil de base". radar://11956694

Cet outil sera utilisé par Kicker à montrer le statut des commandes qui sont exécutées en raison d'un changement de de fichiers. (v3.0.0)

Télécharger

Les binaires préconstruits, signés et prêts à être utilisés, sont disponibles sur le site téléchargements section .

Utilisation

$ ./terminal-notifier.app/Contents/MacOS/terminal-notifier group-ID sender-name message [bundle-ID]

Afin d'utiliser le terminal-notifier, vous devez appeler le binaire à l'intérieur de le paquet d'applications.

Le premier argument spécifie le "groupe" auquel appartient une notification. Pour tout "groupe", seul un ne sera jamais affichée, remplaçant notifications précédemment affichées. Exemples : l'ID du processus de l'expéditeur de l'expéditeur pour que les notifications soient classées par processus unique, ou le répertoire de travail actuel actuel pour que les notifications portent sur un projet.

Les deuxième et troisième arguments décrivent la notification proprement dite et sont respectivement son "titre" et son "message". Par exemple, pour communiquer l'expéditeur d'une notification à l'utilisateur, vous pouvez spécifier le nom de l'expéditeur comme titre.

Le quatrième et dernier argument est facultatif. Il spécifie quelle application doit être activée lorsque l'utilisateur clique sur la notification. Par défaut, Terminal.app sera activé. application à la place, spécifiez l'identifiant du paquet de l'application. Pour Par exemple, pour lancer Safari.app, utilisez : com.apple.Safari .

0 votes

Super, une grande bibliothèque ! J'aimerais la voir mise à jour avec un contrôle sur l'icône et l'alerte par rapport à la bannière, mais elle est vraiment utile. Merci pour le lien ! i.imgur.com/tsCeK.png

2 votes

Superbe petite application, j'ai créé un lanceur et l'ai mis dans /usr/local/bin pour pouvoir l'utiliser n'importe où à partir d'un terminal, etc. Lanceur script : #!/bin/bash cd /Applications/terminal-notifier.app/Contents/MacOS ./terminal-notifier $*

4 votes

Launcher est utile, si vous le modifiez un peu, il fonctionne avec du texte cité avec des espaces : #!/bin/bash cd /Applications/terminal-notifier.app/Contents/MacOS ./terminal-notifier "$@"

47voto

Vic Jang Points 725

Je veux juste ajouter une note à la réponse de @grgarside, parce que je sais que beaucoup de gens veulent avoir une popup de notification qui ne peut être rejetée que par un clic sur le bouton.

Comparison

J'ai trouvé la solution pour vous :

Il était en fait contrôlé par un paramètre dans les préférences du système, plutôt que par un paramètre dans le scriptécrit. Ces deux images devraient tout expliquer

Merci @grgarside pour cette excellente réponse.

System Preference

9 votes

Notez que l'application spécifique varie. Script Editor est seulement pour Script Editor.app y osascript . Dans un flux de services, c'est Automator Runner . Quand à l'intérieur Automator.app c'est Automator .

2 votes

Je trouve ennuyeux que si je clique sur la Bannière, cela fait apparaître l'application script Editor. J'aimerais qu'elle disparaisse simplement au moment du clic, mais cet article indique que vous pouvez la survoler et faire glisser le pavé tactile vers la droite pour la faire disparaître discrètement : osxdaily.com/2012/09/05/…

0 votes

@JoshuaGoldberg Merci de l'avoir ajouté ! J'ai découvert ça intuitivement un jour, c'est une chose que j'aime dans Mac OS X, il fonctionne comme on s'y attend :)

23voto

Gerry Points 14225

Vous pouvez maintenant le faire avec Growl2 ( disponible sur l'App Store ). Installer Growl et activer "OS X Notifications" (capture d'écran)

enter image description here

En outre, vous devrez installer GrowlNotify, un outil en ligne de commande permettant d'envoyer des notifications Growl. Vous pouvez télécharger cet outil gratuitement sur le site Page de téléchargement .

Vous pouvez maintenant générer des notifications Growl à partir de la ligne de commande, qui seront transmises au centre de notification. Par exemple :

growlnotify -n "My App" -m "Hello world"

enter image description here

Notez qu'il ne semble pas possible actuellement de modifier l'icône de l'application.

1 votes

Belle approche, surtout si growl est déjà installé.

1 votes

Je pense que vous pourriez être en mesure d'utiliser l'option --icon path/to/icon.png pour les icônes.

1 votes

Déprécié/ne plus être maintenu ? La dernière mise à jour était pour MacOS 10.9 mavericks

19voto

Arc Points 525

@grgarside 's solution c'est bien, mais c'est vulnérable à l'injection de script, ce qui peut être un problème de sécurité majeur lorsque cela est utilisé pour, par exemple, afficher le contenu du fichier journal ou quelque chose de similaire.

Cela devrait être plus sûr :

#!/bin/bash
X="$*" /usr/bin/osascript -e 'display notification system attribute "X"'

2 votes

C'est intéressant, mais pouvez-vous décrire un scénario où un script que j'exécute sur mon système et qui est uniquement exécutable par l'utilisateur est vulnérable à l'injection de script ?

1 votes

Si vous affichez du contenu utilisateur qui ne provient pas de vous, vous êtes vulnérable. Par exemple, si vous l'exécutez sur un système doté d'un serveur web public, ou lorsqu'une application enregistre des chaînes qu'elle a obtenues sur le net et que vous lisez et affichez, par exemple un navigateur, un programme de messagerie ou un client Twitter. Il pourrait avoir un " pour terminer la chaîne et la déclaration, puis avoir du code et ensuite recommencer une chaîne.

1 votes

Ok, c'est vrai. j'ai du mal à m'imaginer mettre du contenu de formulaires web dans mes notifications, mais je comprends votre point de vue.

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