获取脚本所在目录

发布于 2024-12-01 22:31:26 字数 99 浏览 1 评论 0原文

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

这可能吗?

I'm writing a Tcl script, and I want to get the directory where the script is saved (Not the current dir, so $env(PWD) is not what I want).

Is that possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ヅ她的身影、若隐若现 2024-12-08 22:31:26

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

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

必须在脚本的顶层或命名空间eval内运行(您应该在其中使用variable<出于技术原因,使用 /code> 而不是 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。这在代码运行过程中不会改变(除非您手动设置它)。

When the script is executing directly, you use:

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

This must be run at the top level of the script or inside a namespace eval (where you should use variable instead of set for technical reasons). In particular, it should not be placed inside a procedure and invoked later because by that point the info script call will return something else. Thus, a typical package implementation script might look like this:

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
}

If this is the main application, you can also use $::argv0 in place of info script. That will not change throughout the run of your code (unless you manually set it).

樱娆 2024-12-08 22:31:26

我对 tcl 不太了解(不再)

你会得到脚本名称 $argv0

我只需应用函数/实用程序 realpath ,然后dirname 获取其目录

I'm not very much up to speed with tcl (anymore)

You'd get the script name as $argv0

I'd simply apply the functions/utilities realpath followed by dirname to get it's directory

原野 2024-12-08 22:31:26
file normalize [file dirname [info script]]

如果您通过相对符号链接调用脚本,则无法可靠地工作。我用它来缓解可能的问题:

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]]
}
file normalize [file dirname [info script]]

won't work reliably if you call a script through a relative symlink. I use this to mitigate possible problems:

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]]
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文