 Nachdem ich mir die anderen gleichen Programmhelferchen, die mit growl mitgeliefert werden, angesehen hatte, war ich ja ansatzweise begeistert.
 Nachdem ich mir die anderen gleichen Programmhelferchen, die mit growl mitgeliefert werden, angesehen hatte, war ich ja ansatzweise begeistert.
Unter anderem findet man dort ein kleines Shell-Programm namens growlnotify. Mit Hilfe dieses Programms soll man von der Shell Nachrichten im growl-Stil erstellen können.
Sobald man das ganze installiert hat, zaubert ein growlnotify "jog" -m "mag die shell" in der Shell auch fix ein kleines Fensterchen auf den Desktop. Nett!
Allerdings hat dieses kleines Shell-Programm einen Haken. Es kann nämlich nur bedingt Inhalte weitergeben. Ein uptime | growlnotify "Laufzeit" zeigt zwar noch ein kleines Fensterchen an, will man aber interessantere Sachen machen, wie sich z.B. die aktuellste Zeilen aus /var/log/system.log anzeigen lassen ( tail -f -n1 /var/log/system.log | growlnotify "System.Log:" ) so klappt das nimmer.
Es scheint als würde das Programm auf ein EOF oder ähnliches warten, was es eben in diesem Fall nicht bekommt. Schade! Auch die growlnotify documentation schweigt sich darüber aus. Und im entsprechenden Forum habe ich dann noch beim Querlesen erfahren, dass es mit Cronjob-gesteuerten Meldungen auch noch Probleme gibt.
Das finde ich alles wirklich sehr schade. Tendenziell finde ich Growl wirklich ganz nett, growlnotify würde auch noch das Salz in der Suppe sein. Aber alles in allem macht diese ganze Geschichte einen nicht besonders fertigen Eindruck auf mich.
 
										
					
			
25. Mai 2005 um 18:48 Uhr
eigentlich ganz klar, dass das growl ein EOF oder aehnliches erwartet… weil sonst weiss es ja nicht, dass es ne nachricht losschicken muss.
zumindest waer das meine vermutung.
einen zeilenumbruch kann es ja eigentlich nicht verwenden duerfen als erkennungszeichen dafuer, dass es ne nachricht abschicken soll, weil wenn ich ne nachricht ausgeben will, die mehrzeilig formatiert sein soll, dann wuerde das ja nicht funktionieren oder dann in dem fall x nachrichten ausgeben.
25. Mai 2005 um 21:45 Uhr
Doch. Lass doch einfach die Option -f weg, dann gehts nämlich. Die Option bewirkt ja, dass tail wartet, bis etwas neues in die Datei kommt. Und so lange tail wartet, kann growl ja nicht ausgeben.
Allgemein kannst du ja auch mehrere Zeilen ausgeben, am Schluss schließst du wie alle Shell-Kommandost mit ctrl-D ab, fertig.
Ich weiß schon, wie du dir das vorgestellt hast, dass Growl dir immer wieder neue Sachen ausgibt, aber Growl wird ja wohl nicht anfangen, Meldungen anzuzeigen, wenn der Befehl noch nicht abgeschlossen ist.
25. Mai 2005 um 23:30 Uhr
ja. nein. doch? Also, soweit ich das verstanden habe, nimmt growlnotify STDIN entgegen soweit etwas übergeben wird und stellt dies dar.
Soweit ich das verstehe kann ich also lustig mit der Pipe Sachen an growlnotify übergeben.
Bleiben wir mal bei dem tail -f-Beispiel. Wenn ich eben dieses Beispiel nehme und mal lustig an grep übergebe funktioniert das ja prima. tail -f /var/log/system.log | grep "apache" schmeisst mir also alle Zeilen raus, die „apache“ enthalten.
Letztendlich erzeugt ja grep aber immer nur eine Zeile. Diese müsste ich doch dann wieder an growlnotify übergeben können: tail -f /var/log/system.log | grep "apache" | growlnotify "syslog" gibt aber leider gar nichts zurück.
growlnotify muss doch gar nicht mehr warten, weil grep eine Zeile abgeschlossen übergeben hat.
tail ohne -f macht doch eh nur begrenzt Sinn – zumindest wenn man Meldungen generieren will.
Wo ist denn da mein Denkfehler?
26. Mai 2005 um 16:39 Uhr
Na ja, wenn du -f weglässt bekommst du die selbe Ausgabe, nur dass sie eben abgeschlossen ist. -f sagt doch, wenn ich mich recht erinnere, dass tail auf weitere Zeilen warten soll (aus man):
„-f The -f option causes tail to not stop when end of file is reached, but rather to wait for additional data to be appended to the input. The -f option is ignored if the standard input is a pipe, but not if it is a FIFO.“
Also hat es doch im Gegenteil wenig Sinn, -f zu verwenden, wenn du das Ergebnis von tail mit einer Pipe irgendwohin schicken willst, da das ja erst passieren kann, wenn der Aufruf von tail beendet ist. Und eben das ist ja nie der Fall, wenn tail auf „additional data appended to the input“ wartet.
Klar, das ist ja genau das, was du machen willst. Wäre auch schön, wenn das Kommando ewig weiterläuft und per growl immer neue Meldungen kommen, aber solange der Aufruf von tail nicht endet, wird die Ausgabe von tail auch nicht weitergegeben.
Um das zu erreichen, was du willst, müsstest du irgendwie ein komplexeres Skript bauen, das prüft, ob es neue Zeilen in system.log gibt und diese dann einzeln mit growl ausgibt.
Was ich damit sagen will: Das Problem liegt meines Erachtens nicht bei growlnotify, sondern daran, dass sowas auf der shell einfach nicht möglich ist. Eine Pipe kann, soweit ich weiß, nur dann etwas weiterleiten, wenn das Kommando links von der Pipe beendet ist.