ZetCode

Tcl auto_execok Command

last modified April 3, 2025

The Tcl auto_execok command determines if an executable program exists in the system's PATH. It's commonly used before executing external programs to verify their availability.

Basic Definition

The auto_execok command checks if a given executable name exists in the system's PATH. It returns the full path to the executable if found.

Syntax: auto_execok name. If the executable is found, it returns its full path. If not found, it returns an empty string.

Checking for Common Utilities

This example demonstrates checking for common system utilities like 'ls' on Unix or 'dir' on Windows.

basic_check.tcl
set ls_path [auto_execok ls]
if {$ls_path ne ""} {
    puts "ls found at: $ls_path"
} else {
    puts "ls not found in PATH"
}

This checks if the 'ls' command exists in the system PATH. The result is stored in ls_path and then checked for emptiness to determine existence.

Platform-Specific Executable Checking

auto_execok handles platform differences automatically, making it useful for cross-platform scripts.

platform_check.tcl
set cmd [expr {$::tcl_platform(platform) eq "windows" ? "dir" : "ls"}]
set cmd_path [auto_execok $cmd]
puts "Command path: $cmd_path"

This example selects the appropriate command based on platform and checks its availability. On Windows it checks for 'dir', on Unix for 'ls'.

Checking Multiple Executables

You can check multiple potential executables to find which one is available.

multi_check.tcl
foreach editor {vim nano gedit notepad} {
    set path [auto_execok $editor]
    if {$path ne ""} {
        puts "Found editor: $path"
        break
    }
}

This checks for several common text editors in order. The first one found in PATH will be reported, demonstrating a fallback strategy for executables.

Using with exec

auto_execok is often used before calling exec to avoid errors from missing executables.

exec_check.tcl
set git_path [auto_execok git]
if {$git_path ne ""} {
    set version [exec git --version]
    puts "Git version: $version"
} else {
    puts "Git not installed"
}

This safely checks for Git before attempting to execute it. This prevents runtime errors if Git isn't installed on the system.

Checking with Arguments

auto_execok can check commands that might include arguments.

args_check.tcl
set python_cmd [auto_execok python3]
if {$python_cmd eq ""} {
    set python_cmd [auto_execok python]
}
puts "Python command: $python_cmd"

This checks for Python 3 first, then falls back to regular Python. It demonstrates how to handle version-specific executable names.

Advanced Path Handling

For complex cases, you might need to handle PATH environment variable directly.

path_handling.tcl
set orig_path $::env(PATH)
set ::env(PATH) "$orig_path:/custom/path"
set custom_tool [auto_execok mytool]
set ::env(PATH) $orig_path
puts "Custom tool path: $custom_tool"

This temporarily modifies PATH to include a custom directory, checks for an executable, then restores the original PATH. Useful for non-standard locations.

Best Practices

This tutorial covered the Tcl auto_execok command with practical examples showing its usage in different scenarios.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Tcl Tutorials.