util::which (public)
util::which prog
Defined in packages/acs-tcl/tcl/utilities-procs.tcl
Use environment variable PATH to search for the specified executable program. Replacement for UNIX command "which", avoiding exec. exec which: 3368.445 microseconds per iteration ::util::which: 282.372 microseconds per iteration In addition of being more than 10 time faster than the version via exec, this version is less platform dependent.
- Parameters:
- prog - name of the program to be located on the search path
- Returns:
- fully qualified name including path, when specified program is found, or otherwise empty string
- Author:
- Gustaf Neumann
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- acs_admin_exec_dependencies, acs_tcl_exec_dependencies, xotcl_core_exec_dependencies, xowiki_exec_dependencies
Source code: switch -- $::tcl_platform(platform) { windows { # # Notice: Windows has an alternative search environment # via registry. Maybe it is necessary in the future # to locate the program via registry (sketch below) # # package require registry # set key {HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths} # set entries [registry keys $key $prog.*] # if {[llength $entries]>0} { # set fullkey "$key\\[lindex $entries 0]" # return [registry get $fullkey ""] # } # return "" # set searchdirs [split $::env(PATH) \;] set exts [list .exe .dll .com .bat] } default { set searchdirs [split $::env(PATH) :] set exts [list ""] } } foreach dir $searchdirs { set fullname [ad_file join $dir $prog] foreach ext $exts { if {[ad_file executable $fullname$ext]} { return $fullname$ext } } } return ""XQL Not present: PostgreSQL, Oracle Generic XQL file: packages/acs-tcl/tcl/utilities-procs.xql