获取脚本所在的目录

时间:2011-08-28 12:34:50

标签: unix tcl

我正在编写一个Tcl脚本,我想获取保存脚本的目录(当前目录,所以$env(PWD)不是我想要的。)< / p>

这可能吗?

4 个答案:

答案 0 :(得分:4)

当脚本直接执行时,您使用:

set theDir [file normalize [file dirname [info script]]]

必须在脚本的顶层或namespace eval内部运行(出于技术原因,您应使用variable代替set 。特别是,它不应放在过程中并稍后调用,因为到那时info script调用将返回其他内容。因此,典型的包实现脚本可能如下所示:

namespace eval ::samplePackage {
    variable theDir [file normalize [file dirname [info script]]]
    source $theDir/foo.tcl
    source $theDir/bar.tcl
    load $theDir/grill[info sharedlibextension]
    package provide samplePackage 1.0
}

如果这是主应用程序,您也可以使用$::argv0代替info script。在整个代码运行期间不会改变(除非你手动设置它)。

答案 1 :(得分:2)

答案 2 :(得分:0)

我对tcl(不再)的速度不太高兴了

您将脚本名称设为$argv0

我只是应用函数/实用程序realpath后跟dirname来获取它的目录

答案 3 :(得分:0)

file normalize [file dirname [info script]]
如果通过 relative 符号链接调用脚本,

将无法可靠地工作。我用它来缓解可能出现的问题:

proc script_dir {} {
    set r [info script]
    if {![catch {file link $r} symlink]} {
        set r [file join [file dirname $r] $symlink]
    }
    return [file dirname [file normalize $r]]
}