我有一个名为test7.tcl的文件:
namespace eval ::dai {
variable name "ratzip"
variable birthday "1982"
proc hello {} {
variable name
variable birthday
puts "Hello, I am $name birthday is $birthday"
}
}
我希望以这种方式将此文件源化为另一个名为test8.tcl的文件:
source test7.tcl
::dai::hello
但是它给了我错误:无法读取文件“test7.tcl”:没有这样的文件或目录
但这两个文件在同一个文件夹下,发生了什么?
答案 0 :(得分:11)
要获取与当前正在执行的脚本位于同一目录中的文件,请使用:
source [file join [file dirname [info script]] "test7.tcl"]
请注意,此不会在外部脚本(在您的情况下为test8.tcl)中定义的过程内工作,因为它们通常在源完成后调用。如果是这种情况,最简单的解决方法是将info script
的输出保存在外部脚本中的变量中(或者只是立即获取所有文件而不是懒惰以获得最佳方法)。
答案 1 :(得分:4)
使用source [file join [file dirname [info script]] test7.tcl]
- 这样您就可以通过从执行source
的文件的完整路径名构造的完整路径名来获取目标文件;无论你当前目录在执行期间是什么,这都会有效。
答案 2 :(得分:2)
您不必指定相对于test8.tcl
路径而是相对于当前工作目录的源文件的路径。例如。使用绝对路径:
source /path/to/test7.tcl