如何验证符号链接的目标指向特定路径

如何验证符号链接的目标指向特定路径

在 bash 脚本中,我知道我可以使用以下语法检查文件是否是符号链接

if [ -L $path ]

有谁知道我将如何测试该路径是否链接到特定路径?例如我想检查 的目标是否$path/some/where.

答案1

如果您想检查是否$path是目标为 的符号链接/some/where,可以使用该readlink实用程序。它不是 POSIX,但可以在许多系统上使用(GNU/Linux、BusyBox、*BSD,...)。

if [ "$(readlink -- "$path")" = /some/where ]; then …

请注意,这是精确的文本比较。如果链接的目标是/some//where,或者如果它是where并且 的值$path/some/link,则文本将不匹配。

许多版本都readlink支持 选项-f,该选项通过扩展所有符号链接来规范化路径。

许多 shell,包括 dash、ksh、bash 和 zsh,都支持内置的-ef运算符test来测试两个文件是否相同(在符号链接之后硬链接到同一文件)。此功能也得到广泛支持,但 POSIX 不支持。

if [ "$path" -ef "/some/where" ]; then …

相关内容