LV example of some code to read through $PATH, looking for all the places a command might be found:
set cmd $::argv
set sep ";" ; # For windows.
set sep ":" ; # For unix.
set dirlst [split $::env(PATH) ":"]
foreach dir $dirlst {
set tstfile [file join $dir $cmd]
if {[file exists $tstfile]} {
puts "$tstfile exists"
}
}I need to test the above to see if it works with files that contain special characters, like space.Yikes - there's a bug! The path I get on Windows (in MKS toolkit korn shell) has drive designators on each of the path designators and uses ";" instead of ":" as directory separators.D. McC: This works for me to find an executable in $PATH on Linux:
proc inpath {prog} {
set exok 0
# Original Linux version of "pathlist":
set pathlist [split $::env(PATH) ":"]
# Modified non-Linux version of "pathlist"--delete this line on Linux:
set pathlist [split $::env(PATH) \
[expr {$::tcl_platform(platform) == "windows" ? ";" : ":"}]]
foreach dir $pathlist {
if {[file executable [file join $dir $prog]]} {
set exok 1
break
}
}
return $exok
}# Examples:% inpath supernotepad 1 % inpath bogomips 0LV MacOS or Windows may need to change that ":" to another character, depending on what their shell uses for PATH delimiters.MG On windows, it's always been a semi-colon. I've altered the example above to work on Windows, too (though, when looking for an exec, auto_execok works better). In the code above, you need to use inpath wish.exe, as opposed to auto_execok wish without the extension.

