如何获取当前脚本的路径?

时间:2014-04-25 06:09:11

标签: tcl

有时需要获取脚本的当前路径。有什么方法可以做到这一点?

5 个答案:

答案 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 上获得当前脚本的路径。