Bash

如何驗證符號連結的目標指向特定路徑

  • February 9, 2021

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

引用自:https://unix.stackexchange.com/questions/192294