unknown(3tcl)
π unknown(3tcl) β Tcl Built-In Commands π
okay bestie, we're deep in the Tcl built-in commands today and this one is genuinely so fun. buckle up π
β¨ NAME β¨
unknown β the lil handler that catches it when you try to use a command that literally does not exist π
π¦ SYNOPSIS π¦
unknown cmdName ?arg arg ...?
π DESCRIPTION π
so here's the vibe: whenever a script tries to invoke a command that doesn't exist, the Tcl interpreter invokes this command. iconic, right? β¨
The default implementation of unknown is a library procedure that gets defined when Tcl initializes an interpreter. You can override that default unknown to change its functionality, or you can register a new handler for individual namespaces using the namespace unknown command. both are valid, do what feels right π«Ά
πΈ real talk though: there is no default implementation of unknown in a safe interpreter. so don't be surprised, okay?
Now here's the actual flow, and it's giving detective energy π. If the Tcl interpreter encounters a command name for which there is not a defined command β whether in the current namespace or the global namespace β then Tcl checks for the existence of an unknown handler for the current namespace. By default, this handler is a command named ::unknown. If there is no such command, then the interpreter returns an error π. If the unknown command does exist (or a new handler has been registered for the current namespace), then it gets invoked with arguments consisting of the fully-substituted name and arguments for the original non-existent command.
The unknown command typically does things like:
- searching through library directories for a command procedure with the name
cmdNameπ - expanding abbreviated command names to full-length π
- automatically executing unknown commands as sub-processes βοΈ
In some cases (like expanding abbreviations) unknown will change the original command slightly and then (re-)execute it. and the result of the unknown command is used as the result for the original non-existent command. no cap π§
π the default implementation, step by step π
The default implementation of unknown behaves as follows, and honestly it's a whole journey:
- It first calls the
auto_loadlibrary procedure to load the command. If this succeeds, then it executes the original command with its original arguments. slay β¨ - If the auto-load fails and Tcl is run interactively, then
unknowncallsauto_execokto see if there is an executable file by the namecmd. If so, it invokes the Tclexeccommand withcmdand all the args as arguments. - If
cmdcannot be auto-executed,unknownchecks to see if the command was invoked at top-level and outside of any script. If so, thenunknowntakes two additional steps:- First, it sees if
cmdhas one of the following three forms:!!,!event, or^old^new?^?. If so, thenunknowncarries out history substitution in the same way thatcshwould for these constructs. yes really, we're doing csh history substitution in the year of our lord π - Finally,
unknownchecks to see ifcmdis a unique abbreviation for an existing Tcl command. If so, it expands the command name and executes the command with the original arguments π
- First, it sees if
- If none of the above efforts has been able to execute the command,
unknowngenerates an error return.
Some global variables you should know about:
- If the global variable
auto_noloadis defined, then the auto-load step is skipped. - If the global variable
auto_noexecis defined then the auto-exec step is skipped.
Under normal circumstances the return value from unknown is the return value from the command that was eventually executed. periodt π
π EXAMPLE π
Arrange for the unknown command to have its standard behavior except for first logging the fact that a command was not found:
# Save the original one so we can chain to it
rename unknown _original_unknown
# Provide our own implementation
proc unknown args {
puts stderr "WARNING: unknown command: $args"
uplevel 1 [list _original_unknown {*}$args]
}
π₯ SEE ALSO π₯
β KEYWORDS β
error, non-existent command, unknown
and that's the whole page bestie π«Ά this is Tcl's built-in commands manual, the unknown(3tcl) page, and it's giving peak 3tcl energy. go forth and handle your non-existent commands with main character energy πβ¨π
π¦ where this page comes from
- debian trixie: tcl9.0-doc 9.0.1+dfsg-2
- ubuntu questing: tcl9.0-doc 9.0.2+dfsg-1
- ubuntu resolute: tcl9.0-doc 9.0.3+dfsg-1
- ubuntu stonking: tcl9.0-doc 9.0.4+dfsg-1
- Copyright (c) 1993 The Regents of the University of California
- Copyright (c) 1994-1996 Sun Microsystems, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms