Version 5 of info script

Updated 2005-05-24 17:01:22 by suchenwi

info script ?filename?

If a Tcl script file is currently being evaluated (i.e. there is a call to Tcl_EvalFile active or there is an active invocation of the source command), then this command returns the name of the innermost file being processed. If filename is specified, then the return value of this command will be modified for the duration of the active invocation to return that name. This is useful in virtual file system applications.

Otherwise, if the file is not in the process of actively being sourced in or processed by Tcl_EvalFile, the command returns an empty string.

[So, what should one do if they need the name of the file in which a proc is located, in the case where the code is not actively being sourced?] (escargo 10 Mar 2004 - especially since a proc might not even be defined in a file.)


MJL I find the above description (from the manual page) rather confusing and poorly worded. So here's my attempt at an explanation:

Every Tcl interpreter has an associated "script file" Tcl object, which is initially empty. This can be set by invoking info script new_value and retrieved by invoking info script. The function Tcl_FSEvalFile(), which is called to implement the source command, modifies the script file object as follows. Its value is saved, then set to the name of the file to be evaluated. The file's contents are evaluated, then the saved value is restored.

P.S. Note that Tcl_EvalFile() is obsolete.


RS 2005-05-24 - The following idiom allows code to be executed when a script is sourced at top level into an interp, but not if sourced from other scripts - part of a "self-test" mechanism. The test for info exists argv0 is needed for Tclets, iirc - you may not need it:

 proc sum {a b} {expr {$a+$b}} ;# testing dummy

 if {[info exists argv0] && [file tail [info script]] eq [file tail $argv0]} {
    puts "sum 3 4 = [sum 3 4]"
 }

See also:


Category Command - Tcl syntax help