Version 19 of auto_execok

Updated 2008-01-23 19:28:56 by LV

auto_execok is one of several commands documented at http://www.tcl.tk/man/tcl8.5/TclCmd/library.htm

It determines whether an executable file, or shell builtin, exists, based on its single argument. See auto_reset for info on how to clean up after an auto_execok's caching.


Canonical example usage:

    eval exec [auto_execok dir] *.$suffix

or, with 8.5 [L1 ],

    exec {*}[auto_execok dir] *.$suffix

CL now regards this as canonical only in a rather arcane sense, because dir presents so many problems. Perhaps most immediate is that glob provides a stylistically superior alternative.

[Explain why this is better than $::env(COMSPEC), cmd.exe, ...]

LES on September 16, 2004: auto_execok is better than $::env(COMSPEC) and cmd.exe? Get outta here... :-)


To demonstrate why [eval] was required before 8.5:

 % auto_execok start
 C:/WINNT/system32/CMD.EXE /c start
 % exec [auto_execok start] http://wiki.tcl.tk
 couldn't execute "C:\WINNT\system32\CMD.EXE \c start": invalid argument
 % eval exec [auto_execok start] http://wiki.tcl.tk
 % # success

Note that if any arguments to "start" have spaces (or other white space, or other syntactically-privileged characters) in them, you have to list-protect them from eval

 % set mydoc "My document.doc"
 % eval exec [auto_execok start] $mydoc
 % # msword may complain about being unable to find "My" and "document.doc"'
 % eval exec [auto_execok start] \"\" [list $mydoc]; # should be more successful
 % # Dont't forget the '\"\"' otherwise "My document.doc" is used as the window-titel for
 % # a DOS-shell.

Other wiki pages that deal with similar issues include exec, exec ampersand problem, invoking browsers, clear screen. See also COMSPEC.