Bash scripten ist und bleibt einfach ein Teil meiner Arbeit, auch wenn es Perl gibt. Viele meiner Scripte erzeugen log Dateien wenn das Script gelaufen ist). Natuerlich started man sein Script nicht immer per Hand sondern laesst das cron erlaedigen. Jetzt kann es sein dass das Script nicht fehlerfrei durchgelaufen ist. Falls man eine Fehlermeldung auf STDOUT erhaellt bekommt man diese per Mail von cron. Das ist aber nicht immer einlaeuchten wenn das Script ueber ein paar hundert Zeilen besteht und raubt einem nur den Nerven. Falls man eine nette log Datei hat, wieso sollte man sich diese nicht von dem letzten Durchlauf des scriptes zusenden lassen? Ich habe mir dafuer eine function geschrieben die ich so gut wie in jedem meiner scripte anwenden kann:
TMPLOG=”/tmp/mail.tmp-$RANDOM”
LOGFILE=”~/log/run.log”LINE=”MYKEYWORD”
$TAC $LOGFILE | $GREP -m 1 -B `cat “$LOGFILE” | $WC -l` $LINE | $TAC > $TMPLOG
$MAILX -s “FT: FILE TRANSFER PROBLEM” $MAILTO < $TMPLOG
Somit lasse ich mir immer nur die letzten Eintraege des Durchganges zusenden. Der letzte Durchgang wird durch $LINE dem Script klar gemacht. Was man eigentlich nur beachten muss ist das $LINE nur einmal vorkommen darf pro durchlauf.
Eine andere Idee war:
LASTLINE=$($CAT $LOGFILE | $GREP $LINE -n | $TAIL -n 1 | $AWK -F':' '{ print $1 }') FULLLINE=$($CAT $LOGFILE | $WC -l ) LINENUMBER=$($ECHO `$ECHO $FULLLINE-$LASTLINE | $BC `+1 | $BC) $TAIL -n $LINENUMBER $LOGFILE > $TMPLOG