Contributed by [glennj] ---- #!/bin/sh #\ exec tclsh "$0" ${1+"$@"} proc main {argv0 argc argv} { if {$argc != 2} { puts "$argv0 " exit } foreach {regex filename} $argv break if {![file readable $filename]} { puts stderr "can't read '$filename'" exit 1 } set pipe [open "| tail -f $filename" r] set ::pid [pid $pipe] puts "\[tail process started (pid $::pid)]" fileevent $pipe readable [list inputHandler $pipe $regex] vwait ::forever } proc inputHandler {channel re} { if {[gets $channel line] == -1} { if {[eof $channel]} { puts "\[tail process died (pid $::pid)]" set ::forever now } } elseif {[regexp -- $re $line]} { puts $line } } main $argv0 $argc $argv