2010-04-02 15 views
10

Ich habe ein Bash-Skript, das growlnotify verwendet, um Benachrichtigungen zu senden. Allerdings funktioniert growlnotify nicht, wenn Growl nicht bereits läuft, und Growl wird auch nicht automatisch gestartet, wenn es benötigt wird. Ich möchte also überprüfen können, ob Growl läuft, und dann starten, wenn es nicht geht.
Ich denke so etwas wie zu tun:So starten Sie das Knurren über die Befehlszeile

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

Wie würde ich Growl über die Kommandozeile starten?

+0

Sie verkürzen können Ihre erste zwei Zeilen zu: 'if! ps -e | grep [G] rowl>/dev/null 2> & 1' –

+0

danke. aber meintest du 'if! ps -e | grep [Gg] rowl>/dev/null 2> & 1'? Wie auch immer, der Prozess, nach dem wir suchen, wird immer Growl.GrowlHelperApp im Namen haben, so dass Sie einfach nach Großbuchstaben Growl suchen können. – anoda9

+0

Nein, ich wollte nicht nach beiden Fällen suchen, da ich wusste, dass der Prozess, den du suchst, mit einer Großzahl G beginnt. So zu tun, ist ein Trick, um zu vermeiden, 'grep -v' mit' zu machen ps'. –

Antwort

11

Normalerweise wird der Growl-Installer wird sichergestellt, dass der Benutzer die Installation tun ein Login-Startpunkt wird die , die Benachrichtigung Daemon für Growl startet. Die App ist in die Growl PreferencePane integriert, sodass Sie nicht garantieren können, wo sie sich befindet. Es kann in /Library/PreferencePanes oder ~/Library/PreferencePanes sein, abhängig davon, wie Growl installiert wurde. Wenn Sie glauben, können Sie den Benutzer nicht vertrauen, das Richtige zu tun, können Sie manuell die Helfer App von der Kommandozeile in einer ortsunabhängigen Weise starten, indem Sie seine Bündelkennung mit:

open -b com.Growl.GrowlHelperApp 
+0

Vielen Dank! Genau das habe ich gesucht. – anoda9

+0

Nun, das funktioniert fast. Wenn Sie danach im Systemeinstellungsfenster nachsehen, wird es sagen, dass Growl läuft, wahrscheinlich weil es in Prozessen auf GrowlHelperApp prüft. Aber wenn Sie versuchen und verwenden Sie growlnotify, erhalten Sie einen Fehler: "konnte nicht lokale GrowlApplicationBridgePathway finden, fällt zurück auf NSDNC" – anoda9

+0

Funktioniert für mich. Es wird wahrscheinlich nicht funktionieren, wenn der Benutzer nicht mit dem Windows-Server verbunden ist. Und das ist mit Growl 1.2 unter OS X 10.6.3. Keine Garantie, dass es mit einer anderen Kombination funktioniert oder dass es nicht bricht. Die Quintessenz: Wenn ein Benutzer Growl verwenden möchte, um Benachrichtigungen zu erhalten, muss der Benutzer Growl wie dokumentiert installieren. –

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

Nein, darum geht es mir nicht. Ich möchte überprüfen, ob Growl läuft, nicht growlnotify. Und wenn nicht, möchte ich Growl starten, keine Nachricht mit growlnotify senden. – anoda9

+0

sehen Sie, ob Sie 'growlctl' haben. Verwenden Sie das zum Starten/Stoppen. Wie beim Befehl können Sie versuchen, für "knurren" statt "knurren" (oder geben Sie -i zu "grep") grepping – ghostdog74

+2

growlctll wurde nach Growl Version 0.7.6 eingestellt, und die aktuelle Growl-Version ist 1.2 ... Auch Es wurde für PowerPC kompiliert, also müssen Sie die Rosetta-Software herunterladen, um sie auf Intel-Macs zu verwenden. Ich könnte Rosetta mit dem Skript herunterladen und installieren und die alte Version von Growl herunterladen, um growlctl zu bekommen, aber ich möchte die Dinge so einfach wie möglich machen. Gibt es nicht einen einfachen Weg, einen Prozess wie Growl von der Kommandozeile aus zu starten? – anoda9

Verwandte Themen