wall < "Output mal anders – mit growl!"

Broadcast message from spillerm@unixe.de (pts/1) (So Apr 22 10:36:42 2012):
4
Diesen Beitrag schrieb ich vor 7 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Seit über 10 Jahren folgen meine Skripte einem ähnlichen Schema: sie tun Dinge und melden Ergebnisse, ersteres auf verschiedene Weise, letzteres entweder per syslog oder per Mail. Es funktioniert halt ;-) Allerdings nervt der Overhead, den die Mails erzeugen, doch des öfteren.

Output mit growl Das Müllmanagement im Jahre 2012 ist relativ kompliziert: zu verschiedenen Zeiten müssen Mülltonne, Biotonne, gelber Sack und blaue Tonne rausgestellt werden. Vergesse ich das, habe ich ein Problem — überlaufende Mülltonne, sich stapelnde gelbe Säcke und so weiter. Eine (langweilige) Art ist es, sich Termine mit entsprechenden Remindern in den Kalender zu setzen; ich jedoch habe mir vor Urzeiten ein Shell-Skript gebaut, das auf dem Server ausgeführt wurde und mir Mails schickte. Dieses Skript, so dachte ich, könnte man ja auch nach AppleScript portieren und sich — auf dem heimischen Rechner — Dialogboxen bauen lassen.

Wie sich jedoch schnell zeigte bedarf es vieler Zeilen Code, um in AppleScript die aktuelle Kalenderwoche zu ermitteln; und dass ein per Cron aufgerufenes AppleScript Dialogboxen macht ist auch mehr so PITA. Doch dann fiel mir ein Stück Software ein, das schon seit Jahren auf meinem iMac dümpelt, das sich jedoch prima für eigene Zwecke missbrauchen lässt: Growl. Also mal fix growlnotify runtergeladen und ausprobiert: hah!

#!/bin/bash
# Dieses Script jeden Montag und Donnerstag ausfuehren
# Dabei pruefen: ist Woche gerade oder ungerade?
# Wenn gerade: Di Muelltonne, Fr gelbe Saecke
# Wenn ungerade: Di Biotonne
 
PROG=`basename $0`
MAILTO="empfaenger1@localwurst.de empfaenger2@localwurst.de"
FROM="system@localwurst.de"
WEEK=`date +%W`
WERT=`expr $WEEK % 2`
TODAY=`date +%u`
## Wochentag 1-7, wobei 1=Montag
 
######
 
if [ "$WERT" -eq 0 ] ; then
  TITLE="Gerade Kalenderwoche (KW $WEEK)"
 
  if [ "$TODAY" -eq 1 ] ; then
    ## Montags: Reminder fuer Muelltonne
    SUBJECT="MORGEN Abfuhr Mülltonne - JETZT rausstellen!"
  elif [ "$TODAY" -eq 4 ] ; then
    ## Donnerstags: Reminder fuer gelbe Saecke
    SUBJECT="MORGEN Abfuhr gelber Säcke - JETZT rausstellen!"
  else
    ## Beliebiger anderer Wochentag
    SUBJECT="In dieser Woche sind Mülltonne und gelbe Säcke fällig - aber nicht heute!"
  fi
else
 
  TITLE="Ungerade Kalenderwoche (KW $WEEK)"
 
  if [ "$TODAY" -eq 1 ] ; then
    ## Dann ist Montag: Reminder für Biotonne schicken 
    SUBJECT="MORGEN Abfuhr der Biotonne - JETZT rausstellen!"
  else
    ## Beliebiger anderer Wochentag
    SUBJECT="In dieser Woche ist die Biotonne fällig - aber nicht heute!"
  fi
fi
 
######
 
<font color='red'>/usr/local/bin/growlnotify \
--name "$PROG" \
--title "$TITLE" \
--message "$SUBJECT" \
--sticky -p 2</font>
 
##      echo ":)" | mailx -s "$TITLE $SUBJECT" $MAILTO -r $FROM

Das Skript wird in der Crontab von nun an jeden Montag und jeden Donnerstag ausgeführt und zaubert den Output per Growl in meine rechte untere Bildschirmecke; die Message bleibt so lange dort stehen, bis ich sie anklicke — und ich klicke sie erst an, wenn der Kram draussen steht. Was meist relativ umgehend geschieht, da mich die Message in der Ecke nervt ;-) Damit die Nachricht dauerhaft stehen bleibt, ist aber eines unerlässlich: als »Display Style« dürfen weder »Bezel« noch »Music Video« ausgewählt werden — bei den beiden verschwinden die Boxen nach der in Displays angegebenen Duration, default fünf Sekunden. Wenn man das nicht weiss, debuggt man sich an dieser Stelle den Wolf.

Lustig in diesem Zusammenhang auch OmniGrowl, mit dem man so ziemlich alles machen kann — iTunes, iCal,…

4