解析Go中的符号链接
如何解析Go中的符号链接 目前我调用了解析Go中的符号链接,go,symlink,Go,Symlink,如何解析Go中的符号链接 目前我调用了readlink-f,但我想要更地道的东西 package main import ( "os/exec" "fmt" ) func resolve(p string) string { cmd := exec.Command("readlink", "-f", p) out, _ := cmd.Output() return (string(out)) } func main() { fmt.Prin
readlink-f
,但我想要更地道的东西
package main
import (
"os/exec"
"fmt"
)
func resolve(p string) string {
cmd := exec.Command("readlink", "-f", p)
out, _ := cmd.Output()
return (string(out))
}
func main() {
fmt.Printf(resolve("/initrd.img"))
}
使用:
Lstat返回描述命名文件的FileInfo。如果文件是符号链接,则返回的FileInfo描述符号链接。Lstat不尝试跟踪链接。如果有错误,则类型为*PathError
编辑:
然后返回的os.FileInfo
仅允许您检查“name”是否为链接(fi.Mode()&os.ModeSymlink!=0
)。如果是,则使用获取指针对象:
func Readlink(name string) (string, error)
Readlink返回命名符号链接的目标。如果有错误,则类型为*PathError
看
EvalSymlinks在计算任何符号链接后返回路径名。如果路径是相对的,则结果将相对于当前目录,除非其中一个组件是绝对符号链接
例子
树:
filepath.EvalSymlinks()
注意:非绝对路径(cd/bin
)
还有更糟的事
filepath.EvalSymlinks("/bin/bash") // => /bin/bash
// but
os.Readlink("/bin/bash") // => error: readlink /bin/bash: invalid argument
不适用于游乐场FileInfo结构在哪里提供链接的目标?
s,:=os.Readlink(p);return s
是的。嗯,你为什么一直在所有答案的底部添加标签?标签使用标签功能处理问题。答案是否定的。
/bin/sh -> bash
/usr/lib/libresolv.so -> ../../lib/libresolv.so.2
os.Readlink("/bin/sh") // => bash
os.Readlink("/usr/lib/libresolv.so") //=> ../../lib/libresolv.so.2
filepath.EvalSymlinks("/bin/sh") // => /bin/bash
filepath.EvalSymlinks("/usr/lib/libresolv.so") //=> /lib/libresolv-2.20.so
filepath.EvalSymlinks("sh") // => bash
filepath.EvalSymlinks("/bin/sh") // => /bin/bash
filepath.EvalSymlinks("/bin/bash") // => /bin/bash
// but
os.Readlink("/bin/bash") // => error: readlink /bin/bash: invalid argument