Come posso attivare una notifica al Centro di notifica da un AppleScript o uno script di shell?

282

Mi piacerebbe poter sfruttare le funzionalità del Centro notifiche 10.8 in AppleScript e script di shell che scrivo.

Esiste un comando incorporato o una libreria di terze parti che posso utilizzare sia da un AppleScript che da uno script di shell?

Idealmente il tipo e l'icona della notifica potrebbero essere controllati, ma anche solo la possibilità di attivare un banner di base con un'icona di magazzino (ma testo personalizzato) sarebbe apprezzato.

    
posta Nathan Greenstein 25.07.2012 - 20:57
fonte

11 risposte

400

Con Mavericks e versioni successive, puoi farlo utilizzando la "notifica di visualizzazione" di AppleScript:

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

Questo è letteralmente così semplice! Nessuna 3 rd librerie o app di terze parti richieste ed è completamente portatile da utilizzare su altri sistemi. 10.9 notifica in alto, 10.10 DP in mezzo, 10.10 in basso.

AppleScript può essere eseguito dalla shell usando / usr / bin / osascript:

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

Puoi anche personalizzare ulteriormente l'avviso aggiungendo ...

  • un sottotitolo

    Aggiungi "sottotitolo" seguito dalla stringa o variabile contenente il sottotitolo.

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

    L'esempio precedente produce la seguente notifica:

  • suoni

    Aggiungi "nome del suono" seguito dal nome di un suono che verrà riprodotto insieme alla notifica.

    display notification "message" sound name "Sound Name"
    

    I nomi validi dei suoni sono i nomi dei suoni situati in ...

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

La pubblicazione di notifiche può essere impacchettata come uno script da riga di comando. Il seguente codice può essere eseguito in Terminal e aggiungerà uno script a / usr / local / bin (deve esistere, aggiungere a $ PATH) chiamato notify .

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

Questo è lo script che verrà aggiunto per notificare.

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

Ora per visualizzare una notifica:

notify Lorem ipsum dolor sit amet
sleep 5; notify Slow command finished
    
risposta data 29.12.2013 - 14:46
fonte
84

terminale-notificatore

Da README:

terminal-notifier is a command-line tool to send Mac OS X User Notifications, which are available in Mac OS X 10.8.

It is currently packaged as an application bundle, because NSUserNotification does not work from a ‘Foundation tool’. radar://11956694

This tool will be used by Kicker to show the status of commands which are executed due to filesystem changes. (v3.0.0)

Download

Prebuilt binaries, which are code-signed and ready to use, are available from the downloads section.

Usage

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

In order to use terminal-notifier, you have to call the binary inside the app bundle.

The first argument specifies the ‘group’ a notification belongs to. For any ‘group’ only one notification will ever be shown, replacing previously posted notifications. Examples are: the sender’s process ID to scope the notifications by a unique process, or the current working directory to scope notifications by a project.

The second and third arguments describe the notification itself and are its ‘title’ and ‘message’ respectively. For example, to communicate the sender of a notification to the user, you could specify the sender’s name as the title.

The fourth and last argument is an optional one. It specifies which application should be activated when the user clicks the notification. By default this will activate Terminal.app, to launch another application instead specify the application’s bundle identifier. For example, to launch Safari.app use: com.apple.Safari.

    
risposta data 25.07.2012 - 22:19
fonte
23

Voglio solo aggiungere una nota alla risposta di @grgarside, perché so che molte persone vogliono avere un popup di notifica che può essere rimosso solo facendo clic sul pulsante.

Hotrovatolasoluzioneperte:

Inrealtàeracontrollatodaun'impostazioneinPreferenzedisistema,piuttostochedaalcuniparametriscrittinelloscript.Questedueimmaginidovrebberospiegaretutto

Graziea@grgarsideperl'ottimarisposta.

    
risposta data 07.11.2015 - 01:36
fonte
21

Ora puoi farlo con Growl2 ( disponibile su App Store ). Installa Growl e abilita "OS X Notifications" (screenshot)

Inoltre,ènecessarioinstallareGrowlNotifyperunostrumentodarigadicomandoperinviarenotificheGrowl.Puoiscaricarequestostrumentogratuitamentenella pagina di download .

Ora puoi generare notifiche Growl dalla riga di comando, che verrà inoltrata al Centro di notifica. Ad esempio:

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

Si noti che al momento non sembra possibile cambiare l'icona dell'applicazione.

    
risposta data 20.09.2012 - 15:25
fonte
13

Recentemente ho biforcato il terminale-notificatore per creare uno strumento da riga di comando per visualizzare avvisi di notifica (con azioni) e Avvisi dei tipi di risposta.

Lo uso con gli script di shell e le app golang per ottenere risposte interattive dagli utenti.

link

    
risposta data 24.12.2015 - 16:29
fonte
12

@grgarside 's soluzione è bello, ma è vulnerabile all'iniezione di script, che può essere un grosso problema di sicurezza quando viene utilizzato per es. mostra il contenuto del file di registro o qualcosa di simile.

Questo dovrebbe essere più sicuro:

#!/bin/bash
X="$*" /usr/bin/osascript -e 'display notification system attribute "X"'
    
risposta data 14.05.2015 - 14:23
fonte
10

Poiché Growl non è gratuito e il terminale non è disponibile sui sistemi pre-10.8, tendo a utilizzare cocoaDialog . È gratuito e open source, quindi puoi anche distribuirlo insieme ai tuoi script.

Se non hai bisogno di molte personalizzazioni, puoi anche utilizzare display notification di AppleScript, che puoi anche chiamare dalla shell come altri hanno già menzionato.

Ma fai attenzione che AppleScript sembra richiedere virgolette. Quindi se hai bisogno di variabili, questo non funzionerà :

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

Dovrai usare le doppie virgolette di escape. Questo è brutto ma funziona :

osascript -e "display notification \"$text\" with title \"$title\""
    
risposta data 21.01.2013 - 10:59
fonte
6

Ecco una versione interessante che uso in uno script ruby su OS X (in modo da poter avviare uno script e ottenere un aggiornamento anche dopo aver disattivato la finestra):

cmd = %Q|osascript -e 'display notification "Server was reset" with title "Posted Update"'|
system ( cmd )
    
risposta data 14.10.2014 - 22:13
fonte
6

(Questa è un'implementazione alternativa basata sull'eccellente risposta di @grgarside.)

AppleScript può essere interpretato direttamente inserendo osascript nella riga 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

Salva questo come notify da qualche parte nel tuo percorso, ad esempio /usr/local/bin/notify , e rendilo eseguibile ( chmod +x notify ). Accetta un messaggio e un titolo facoltativo. Se uno dei due ha uno spazio, inserirlo tra virgolette in modo che la shell lo interpreti come un singolo argomento.

$ notify "Lorem ipsum dolor sit amet" "Testing Notifications"
    
risposta data 30.11.2017 - 23:27
fonte
4

Documentazione ufficiale

link

Copia il testo qui, nel caso in cui il documento venga spostato o rimosso.

To show a notification, provide the display notification command with a string to display. Optionally, provide values for the with title, subtitle, and sound name parameters to provide additional information and an audible alert when the notification appears

display notification "All graphics have been converted." with title "My Graphic Processing Script" subtitle "Processing is complete." sound name "Frog"

NOTE

After using a script to display a notification, the script or Script Editor (if the script is run from within Script Editor) is added to the list of notifying apps in System Preferences > Notifications. There, you can configure options, such as whether to display notifications as alerts or banners.

Clicking the Show button in an alert-style notification opens the app that displayed the notification. For a script app, the action of opening the app again triggers the run handler of the script, potentially causing the script to begin processing a second time. Keep this in mind, and add code to your script to handle this scenario, if appropriate.

    
risposta data 01.01.2018 - 07:05
fonte
2

Un'alternativa:

In .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"

Usa comando: sys-notify "title" "message"

    
risposta data 24.10.2017 - 10:47
fonte