我有两个带有目录路径的变量。我想看看它们在tcl中是否相等。问题是它们可能是链接,我想比较原始路径。
if { ![string equal -nocase $path1 $path2]} { #do something}
我已经尝试[file readlink $path1]
来获取原始路径,但它不适用于目录。在tcl中有一个命令,比如目录的readlink吗?
答案 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
。循环是因为链接可以指向链接......我们假设您没有链接循环;限制循环的最大次数留作练习......
一旦你有了一个好的规范化器,比较只是字符串 - 比较规范化形式。