Stupid, stupid, Tcl. If you want to run a shell command with a glob filename, like
*.h, you can't just do:
exec ls -l *.h
You have to explicitly tell Tcl to expand the glob, because it will pass *.h to the shell literally. But you also can't do:
exec ls -l [glob *.h]
because it will pass the entire list to the shell literally (thanks, Tcl, that's useful). You get lucky and it works if there is exactly one file matched by the glob. Otherwise
lswill complain that there's no file called "a.h b.h c.h".
So what do you do? Unfortunately, if you pull up the man page for
execon the internet, it tells you a way to do this that is only syntactically valid for Tcl 8.5 or greater. For those of us living in the past, the demonic incantation you must utter is:
eval [list exec ls -l] [glob *.h]
Don't use Tcl unless you have to.