2010-04-02 19 views
10

Ho uno script di bash che utilizza growlnotify per inviare notifiche. Tuttavia, growlnotify non funziona se Growl non è già in esecuzione e non avvierà automaticamente Growl se ne ha bisogno. Quindi voglio essere in grado di verificare se Growl è in esecuzione, e quindi avviarlo se non lo è.
Sto pensando di fare qualcosa di simile:come avviare growl tramite la riga di comando

g=$(ps -e | grep Growl | grep -v grep) 
if [ -z "$g" ] # Growl isn't running 
then 
# (start Growl) 
fi 

Come dovrei iniziare Growl tramite riga di comando?

+0

È possibile abbreviare il primo due righe per: 'if! ps -e | grep [G] rowl>/dev/null 2> & 1' –

+0

grazie. ma intendevi "se! ps -e | grep [Gg] rowl>/dev/null 2> & 1'? in ogni caso, il processo che stiamo cercando avrà sempre Growl.GrowlHelperApp nel nome, quindi puoi semplicemente grep per Growl in lettere maiuscole. – anoda9

+0

No, non intendevo controllare per entrambi i casi poiché sapevo che il processo che stai cercando inizia con la lettera maiuscola G. Facendolo nel modo che ho mostrato è un trucco per evitare di dover fare 'grep -v' con' ps'. –

risposta

11

Normalmente l'installatore Growl farà in modo che l'utente che esegue l'installazione diventa un elemento di avvio di accesso che lancia , il demone di notifica per Growl. L'app è integrata in Growl PreferencePane, quindi non è possibile garantire dove verrà localizzata; potrebbe essere in /Library/PreferencePanes o ~/Library/PreferencePanes, a seconda di come è stato installato Growl. Se senti che non ci si può fidare l'utente a fare la cosa giusta, è possibile avviare manualmente l'applicazione aiuto dalla riga di comando in modo indipendente dalla posizione utilizzando il suo identificatore bundle:

open -b com.Growl.GrowlHelperApp 
+0

Grazie! questo è esattamente quello che stavo cercando. – anoda9

+0

Beh, questo funziona quasi. Se guardi successivamente nel pannello delle preferenze di sistema, dirà che Growl è in esecuzione, probabilmente perché controlla GrowlHelperApp nei processi. Ma se provi a utilizzare growlnotify, ricevi un errore: "Impossibile trovare GrowlApplicationBridgePathway locale, ricadendo su NSDNC" – anoda9

+0

Funziona per me. Probabilmente non funzionerà se l'utente non è connesso al server della finestra. E questo è con Growl 1.2 su OS X 10.6.3. Non garantisce che funzionerà con qualsiasi altra combinazione o che non si romperà. La linea di fondo: se un utente desidera utilizzare Growl per ricevere notifiche, l'utente deve installare Growl come documentato. –

0
pgrep growlnotify || growlnotify <options> & 
+1

No, non è quello che sto chiedendo. Voglio verificare se Growl è in esecuzione, non grownnotify. E se non lo è, voglio avviare Growl, non inviare un messaggio con growlnotify. – anoda9

+0

vedi se hai 'growlctl'. usalo per iniziare/fermare. Per quanto riguarda il comando, puoi provare grepping per 'growl' invece di' Growl' (o dare -i a 'grep') – ghostdog74

+2

growlctl è stato interrotto dopo la versione 0.7.6 di Growl e la versione corrente di Growl è 1.2 ... Inoltre, è stato compilato per PowerPC, quindi è necessario scaricare il software Rosetta per usarlo su Intel Mac. Potrei avere lo script per scaricare e installare Rosetta e scaricare la vecchia versione di Growl per ottenere growlctl, ma mi piacerebbe fare le cose nel modo più semplice possibile. Non c'è un modo semplice per avviare un processo come Growl dalla riga di comando? – anoda9

Problemi correlati