有时需要获取脚本的当前路径。有什么方法可以做到这一点?
答案 0 :(得分:15)
正在评估脚本(但不一定在调用其过程时)当前脚本名称(严格地说,传递给source
或C API等效的任何内容,Tcl_EvalFile()
和相关的)是info script
的结果;最好将其标准化为绝对路径名,这样任何对cd
的调用都不会改变解释。
需要这些信息的脚本往往会将这样的内容放在自己内部:
# This is a *good* use of [variable]…
variable myLocation [file normalize [info script]]
然后他们可以轻松地检索值(或从中派生的东西):
proc getResourceDirectory {} {
variable myLocation
return [file dirname $myLocation]
}
其他常见位置是:
$::argv0
这是“主要”脚本(如果它等于info script
,您正在评估主要脚本)[info nameofexecutable]
这是Tcl解释程序本身(通常是C级的argv[0]
)[info library]
这是Tcl自己的库脚本所在的位置$::tcl_pkgPath
这是安装软件包的目录的Tcl列表$::auto_path
这是搜索脚本的目录的Tcl列表(包括包!包路径用于初始化它。)答案 1 :(得分:6)
我发现这样做的最佳方式:
set script_path [ file dirname [ file normalize [ info script ] ] ]
puts $script_path
答案 2 :(得分:1)
您也可以尝试这样:
file normalize $argv0
file normalize [info nameofexecutable]
获取完全标准化的名称
答案 3 :(得分:1)
您可以查看http://wiki.tcl.tk/1710。那里的解决方案还负责处理可能的(多个)符号链接并指向脚本的物理根位置。
答案 4 :(得分:0)
如果它不适用于“信息脚本”,您可以这样做
regsub {/[a-zA-Z0-9_]+$} $argv0 {} path
do $path/other_script_on_the_same_path_as_this.tcl
现在您将在变量 $path 上获得当前脚本的路径。