Sometimes I find shell pipelines more easy than Tcl pipelines when you need to do glob substitution.
proc system {str} { exec sh -c $str }
The POSIX flag -c makes sh to read commands from a string. In my case sh is linked to dash, a light and fast POSIX shell. All the string is executed by sh not by Tcl.
All the pipeline is executed by the POSIX shell so you have to use the POSIX shell redirections.
You can do things like:
>system { ls *.tcl | wc -l }
It is a lot more clean than:
> exec ls {*}[glob *.tcl] | wc -l
Combining tcl command substitution with shell variable substitution:
>set a "hello"; set b "world" >system [subst -novariables {a=[set a];b=[set b]; echo $a $b}]; hello world
The difference with the TclX system command is that you can still capture the output of the command:
>set date [system date] >set date lun dic 28 15:13:29 CET 2009
Probably it is more easy to capture errors using directly exec.