#!/bin/bash # logwatch # Watch a log file for changes, printing each line as it appears. Kinda like 'watch' except it perserves # the scrollback buffer and you don't have to get the output to exactly fit in the screen. # usage: logwatch # How often should the script poll the logfile (in seconds) delay=10 logfile=$1 lastline=`tail -n 1 $logfile | sed 's/[ ]*$//'` cat $logfile until [[ $logfile == 1 ]] do logtemp=`tail -n 20 $logfile | sed 's/.*/&#/'` currentline=`echo $logtemp | sed 's/#\ /\n/g' | tail -n 1 | sed 's/[ ]*$//' | sed 's/#$//'` linenumber=0 until [[ "$lastline" == "$currentline" ]] do currentline=`echo $logtemp | sed 's/#\ /\n/g' | tail -n 1 | sed 's/[ ]*$//' | sed 's/#$//'` if [[ "$lastline" == "$currentline" ]] then : else linenumber=$(( linenumber + 1 )) logtemp=`echo $logtemp | sed 's/#\ /\n/g' | sed '$d' | sed 's/.*/&#/g'` fi done tail -n $linenumber $logfile lastline=`tail -n 1 $logfile` sleep $delay done