심볼릭 링크의 대상이 특정 경로를 가리키는지 확인하는 방법

심볼릭 링크의 대상이 특정 경로를 가리키는지 확인하는 방법

Bash 스크립트에서 다음 구문을 사용하여 파일이 심볼릭 링크인지 확인할 수 있다는 것을 알고 있습니다.

if [ -L $path ]

이 경로가 특정 경로에 연결되어 있는지 테스트하는 방법을 아는 사람이 있습니까? 예를 들어 내가 확인하고 싶은 대상 $path은 입니다 /some/where.

답변1

$path대상이 심볼릭 링크인지 확인하려는 경우 이 유틸리티를 /some/where사용할 수 있습니다 . readlinkPOSIX는 아니지만 많은 시스템(GNU/Linux, BusyBox, *BSD 등)에서 작동합니다.

if [ "$(readlink -- "$path")" = /some/where ]; then …

이는 정확한 텍스트 비교입니다. 링크의 대상이 /some//where이거나 이고 where값이 $path이면 /some/link텍스트가 일치하지 않습니다 .

많은 버전에서는 모든 기호 링크를 확장하여 경로를 정규화하는 readlink옵션을 지원합니다 .-f

dash, ksh, bash 및 zsh를 포함한 많은 셸은 두 파일이 동일한지 테스트하기 위한 내장 -ef연산자를 지원합니다 test(기호 링크 후 동일한 파일에 대한 하드 링크). 이 기능도 널리 지원되지만 POSIX는 지원되지 않습니다.

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

관련 정보