В bash-скрипте я знаю, что могу проверить, является ли файл символической ссылкой со следующим синтаксисом
if [ -L $path ]
Кто-нибудь знает, как я буду проверять, был ли этот путь связан с определенным путем? Например, я хочу проверить, является ли цель$path
является /some/where
.
readlink
по известному пути и сравнить его с путем, который вы тестируете?if [ -L "$path" ]
), если у вас нет веских причин не делать этого и вы уверены, что знаете, что делаете.Ответы:
Если вы хотите проверить,
$path
является ли символическая ссылка, целью которой является/some/where
, вы можете использоватьreadlink
утилиту. Это не POSIX, но он доступен во многих системах (GNU / Linux, BusyBox, * BSD,…).Обратите внимание, что это точное сравнение текста. Если цель ссылки является
/some//where
, или , если этоwhere
и значение$path
IS/some/link
, то тексты будут не совпадать.Многие версии
readlink
поддерживают опцию-f
, которая канонизирует путь путем расширения всех символических ссылок.Многие оболочки, в том числе dash, ksh, bash и zsh, поддерживают
-ef
оператор воtest
встроенной функции для проверки того, являются ли два файла одинаковыми (жесткие ссылки на один и тот же файл после символических ссылок). Эта функция также широко поддерживается, но не POSIX.источник
Чтобы избежать проблем с относительным и абсолютным путем, и "/" в конце пути или ссылки:
источник
readlink
не кажется необходимым,realpath
автоматически разрешит символическую ссылку.