比较tcl中的两条路径

比较tcl中的两条路径,tcl,Tcl,我有两个变量,其中有目录路径。我想看看他们在tcl是否平等。问题是它们可能是链接,我想比较一下原始路径 if { ![string equal -nocase $path1 $path2]} { #do something} 我尝试了[file readlink$path1]来获取原始路径,但它对目录不起作用。tcl中是否有像readlink for directories这样的命令?这里并不完全清楚您的意思,但您可以进行复合操作 proc readlink_normalize {filen

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

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

我尝试了[file readlink$path1]来获取原始路径,但它对目录不起作用。tcl中是否有像readlink for directories这样的命令?

这里并不完全清楚您的意思,但您可以进行复合操作

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
}
关键是文件连接在这里很有用,文件dirname很适合处理相对链接,不是所有链接都是绝对链接,文件readlink只有在文件类型返回“link”时才可用。我们将文件名的非终端部分的处理留给文件规范化。循环是因为一个链接可以指向一个链接…我们假设你没有链接循环;限制循环的最大次数是一个练习


一旦你有了一个好的规范化程序,比较就只是比较规范化表单的字符串问题。

你可能正在使用[file normalize$path1]查找@Glenn,但没有找到原始路径。“readlink for Directory”是什么意思?@Donal我有一个路径=/drive/two,实际上链接到/drive/one。给定/drive/two,我想得到/drive/one如果其中一个是另一个的符号链接,您可以将该符号链接文件readlink;我已经测试过了,很有效。如果我没有说清楚,我很抱歉。我没有试图比较其路径的文件。我只有两个目录,我想确保是相同的。哪个平台?通常的方法是在unix上检查相同的索引节点号,通过winapi或更简单的方法在windows上查看file stat或类似的内容:使用一个目录名编写文件,使用另一个名称列出目录内容,然后检查是否看到它。