在 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 …