比较tcl中的两个路径

时间:2015-01-30 17:58:22

标签: tcl

我有两个带有目录路径的变量。我想看看它们在tcl中是否相等。问题是它们可能是链接,我想比较原始路径。

if { ![string equal -nocase $path1 $path2]} { #do something} 

我已经尝试[file readlink $path1]来获取原始路径,但它不适用于目录。在tcl中有一个命令,比如目录的readlink吗?

1 个答案:

答案 0 :(得分:0)

这里的含义并不完全清楚,但你可以进行复合操作。

proc readlink_normalize {filename} {
    set f [file normalize $filename]
    while {[file exists $f] && [file type $f] eq "link"} {
        set f [file normalize [file join [file dirname $f] [file readlink $f]]]
    }
    return $f
}

关键是file join在这里很有用,file dirname适用于处理相对链接(并非所有链接都是绝对的),file readlink仅在file type时可用返回“链接”。我们将文件名的非终端部分的处理留给file normalize。循环是因为链接可以指向链接......我们假设您没有链接循环;限制循环的最大次数留作练习......


一旦你有了一个好的规范化器,比较只是字符串 - 比较规范化形式。