获取TCL中从另一个脚本调用的进程的路径

获取TCL中从另一个脚本调用的进程的路径,tcl,Tcl,我是TCL编程的新手 我有一个名为test1.tcl和test2.tcl的tcl脚本,分别位于两个不同的位置 目录F:\TCLPrograms\SamplePrograms\test1.tcl和F:\TCLPrograms\test2.tcl 我想知道test2.tcl的完整路径,它是一个进程 如果我在proc disp{}中给出info[script],它将返回调用它的路径 i、 EF:\TCLPrograms\SamplePrograms\test1.tcl 请有人告诉我获取进程的路径 te

我是TCL编程的新手

我有一个名为test1.tcl和test2.tcl的tcl脚本,分别位于两个不同的位置

目录F:\TCLPrograms\SamplePrograms\test1.tcl和F:\TCLPrograms\test2.tcl

我想知道test2.tcl的完整路径,它是一个进程

如果我在proc disp{}中给出info[script],它将返回调用它的路径

i、 EF:\TCLPrograms\SamplePrograms\test1.tcl

请有人告诉我获取进程的路径

test1.tcl:

puts "Processing test1..."
source "F:\\TCLPrograms\\test2.tcl"
set rc [disp]
puts "Executed...."
test2.tcl:

proc disp { } {
puts "Successfully executed test2.tcl"
set path [info script]
puts "Script is invoked from the path: $path"
}

提前感谢

信息脚本的结果取决于当前最内部的
源代码
,过程不维护该信息。(好吧,它是在调试8.6和ActiveState的一些8.5版本的信息时维护的,但是访问它确实很麻烦。)

最简单的方法是使用变量保存文件名,如下所示:

variable dispScriptFile [file normalize [info script]]
proc disp {} {
    variable dispScriptFile
    puts "Successfully executed test2.tcl"
    set path [file dirname $dispScriptFile]
    puts "Script is invoked from the path: $path"
}
请注意,我们使用规范化的文件名,因此即使使用相对路径名,然后使用
cd
到其他目录,文件名仍然有效。
(我还建议将
test2.tcl
的全部内容放在它自己的名称空间中;这样可以更容易地将内容分开。)

谢谢你的宝贵评论,但问题是我还有两个过程{}在同一个test2.tcl中,我将从位于不同位置的两个不同的tcl脚本调用它,每当我调用proc{}时,我需要知道您可以为它建议的路径?您可以在该文件中定义的所有过程之间共享一个变量(根据需要更改名称)。要么我完全误解了你的问题。我特别喜欢文件规范化部分。好主意。