Bash
如何驗證符號連結的目標指向特定路徑
在 bash 腳本中,我知道我可以使用以下語法檢查文件是否是符號連結
if [ -L $path ]
有誰知道我將如何測試該路徑是否連結到特定路徑?例如,我想檢查目標是否
$path
為/some/where
.
如果要檢查是否
$path
是目標為 的符號連結/some/where
,可以使用該readlink
實用程序。它不是 POSIX,但在許多系統(GNU/Linux、BusyBox、*BSD、…)上都可用。if [ "$(readlink -- "$path")" = /some/where ]; then …
請注意,這是一個精確的文本比較。如果連結的目標是
/some//where
,或者如果它是where
並且值$path
是/some/link
,那麼文本將不匹配。許多版本都
readlink
支持 option-f
,它通過擴展所有符號連結來規範化路徑。許多 shell,包括 dash、ksh、bash 和 zsh,都支持內置的
-ef
運算符test
來測試兩個文件是否相同(硬連結到同一個文件,在跟隨符號連結之後)。此功能也得到廣泛支持,但不支持 POSIX。if [ "$path" -ef "/some/where" ]; then …