- executes it in a sh (hence Unix only, for now)
- deletes it
- writes the result to another file ("done")
proc every {ms body} {eval $body; after $ms [info level 0]} set filename /home/suchenwi/todo every 5000 { if [file exists $::filename] { catch {exec sh $::filename} res set fp [open /home/suchenwi/done w] puts $fp $res close $fp file delete $::filename } }To feed this demon, I only have to type at the shell prompt
echo "grep fff t" > ~/todoand 5 sec or so later, the file ~/done contains the result of this demonery... What that is good for? Well, a colleague wanted to be able to run a program under a different account, without uid/su/rsh. This is the solution I came up with. A few days later, I needed it myself:Printer demon: Assume a Tk app runs on Windows - its canvas can produce Postscript files, but how to print it (without starting up Ghostview or so, and manual intervention)? This solution requires that you have a directory on a Unix box (where of course just lpr brings Postscript well to paper) which is remotely mounted to your Windows box too. In my case, /home/suchenwi is mounted on Windows as x: Then I just need the following little demon:
proc every {ms body} {eval $body; after $ms [info level 0]}
cd /home/suchenwi/etc/toprint every 30000 { foreach filename [glob -nocomplain *.ps *.PS] { exec lpr $filename file delete -force $filename } } vwait forever
Started on Unix with $ tclsh ~/tcl/printerdemon.tcl &, it hovers in the background, and every half minute checks whether there are files in the well-known directory. On the Windows side, I just need
$canvas postscript -file x:/etc/toprint/[pid].psand soon enough, the pages comes out of the printer... To bring in some FIFO queuing, one could use clock seconds in generating the filename, and lsort -integer in the demon.