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

18voto

Steve Points 261

(Il s'agit d'une implémentation alternative basée sur l'excellente réponse de @grgarside).

AppleScript peut être interprété directement en mettant osascript dans la ligne shebang.

#!/usr/bin/osascript

on run argv
    if length of argv = 1 then
        display notification (item 1 of argv) with title "Notification"
    else if length of argv > 1 then
        display notification (item 1 of argv) with title (item 2 of argv)
    else
        return "<message> is required\nUsage: notify <message> [<title>]"
    end if
end run

Enregistrer sous notify quelque part dans votre chemin, par exemple, /usr/local/bin/notify et le rendre exécutable ( chmod +x notify ). Il accepte un message et un titre optionnel. Si l'un ou l'autre contient des espaces, mettez-les entre guillemets pour que l'interpréteur de commandes les interprète comme un seul argument.

$ notify "Lorem ipsum dolor sit amet" "Testing Notifications"

1 votes

Cela permet d'éviter les attaques par injection auxquelles toutes les autres réponses sont vulnérables.

0 votes

Beau script, merci ! Notez que "notify" est une commande shell intégrée dans certaines commandes (comme la mienne, tcsh), donc vous devrez peut-être utiliser un nom différent, comme je l'ai fait.

2 votes

Existe-t-il un moyen de rendre la notification collante, de sorte qu'il faille cliquer pour la supprimer ?

16voto

mivk Points 807

Comme Growl n'est pas gratuit, et que terminal-notifier n'est pas disponible sur les systèmes pré-10.8, j'ai tendance à utiliser cacaoDialog . Il est gratuit et open source, vous pouvez donc probablement le distribuer avec vos scripts.

Si vous n'avez pas besoin de beaucoup de personnalisation, vous pouvez également utiliser l'outil AppleScript display notification que vous pouvez également appeler depuis le shell comme d'autres l'ont déjà mentionné.

Mais attention, AppleScript semble exiger des guillemets doubles. Donc si vous avez besoin de variables, ce ne fonctionnera pas :

osascript -e "display notification '$text' with title '$title'" #WRONG

Vous devrez utiliser des guillemets échappés. C'est moche mais fonctionne :

osascript -e "display notification \"$text\" with title \"$title\""

1 votes

Cela fonctionne aussi : osascript -e 'display notification "Lorem ipsum dolor sit amet" with title "Title"'

0 votes

Également déprécié. Les rendements des liens "Il n'y a pas de site Pages GitHub ici".

9voto

Rupert Bates Points 1690

En voici une que j'utilise dans un script sur OS X (pour pouvoir lancer un script et obtenir une mise à jour même après avoir quitté la fenêtre) :

cmd = %Q|osascript -e 'display notification "Server was reset" with title "Posted Update"'|
system ( cmd )

3 votes

Wow... donc la chaîne est quelque chose comme Utilisateur -> Ruby -> Shell -> AppleScript -> Objective-C -> Assemblage -> CPU ?

1 votes

J'arrive tard, mais pour mémoire, pour des raisons de commodité, j'ai écrit une enveloppe LISP pour la commande Ruby, et je l'ai tapée avec les bras mécaniques d'un de ces exosquelettes mécaniques géants P-5000 Powered Work Loader comme ceux que Ripley portait dans le film Aliens .

0 votes

@JohnSmith C'est précisément la raison pour laquelle je lis tous les commentaires sur les posts SE.

8voto

NepUS Points 163

Une alternative :

En .bash_profile :

function _sys_notify() {
    local notification_command="display notification \"$2\" with title \"$1\""
    osascript -e "$notification_command"
}
alias sys-notify="_sys_notify $1 $2"

Utilisez la commande : sys-notify "title" "message"

6voto

Kevin Points 97

Merci, c'était juste ce dont j'avais besoin pour quelques scripts d'utilisateurs. J'ai fait une légère modification pour ajouter un sous-titre et un son. Si une valeur n'est pas fournie, elle est ignorée.

function _sys_notify() {
local notification_command="display notification \"$2\" with title \"$1\" subtitle \"$3\" sound name \"$4\""
osascript -e "$notification_command"
}

alias sys-notify="_sys_notify $1 $2 $3 $4"

Pour le son, utilisez un nom de fichier sonore sans extension provenant de /System/Library/Sounds. Par exemple, pour utiliser le fichier Ping.aiff, utilisez Ping pour 4 $.

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