Как проверить цель символической ссылки указывает на конкретный путь

Внутри сценария 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 поддерживают параметр -f , который канонизирует путь, расширяя все символические ссылки.

Многие оболочки, включая тире, ksh, bash и zsh, поддерживают оператор -ef в встроенном test для проверки того, являются ли два файла одинаковыми (жесткие ссылки на один и тот же файл после следующих символических ссылок). Эта функция также широко поддерживается, но не POSIX.

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