Bash 스크립트에서 다음 구문을 사용하여 파일이 심볼릭 링크인지 확인할 수 있다는 것을 알고 있습니다.
if [ -L $path ]
이 경로가 특정 경로에 연결되어 있는지 테스트하는 방법을 아는 사람이 있습니까? 예를 들어 내가 확인하고 싶은 대상 $path
은 입니다 /some/where
.
답변1
$path
대상이 심볼릭 링크인지 확인하려는 경우 이 유틸리티를 /some/where
사용할 수 있습니다 . readlink
POSIX는 아니지만 많은 시스템(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 …