나는 이것을 가지고있다:
file_path="/actual/file/path"
read_link="$(readlink "$file_path")" # just in case it's a symlink
readlink가 심볼릭 링크가 아닌 경우 빈 문자열을 에코합니까? 심볼릭 링크가 아닌 경우 원래 경로를 에코하는 readlink 옵션이 있습니까?
답변1
GNU/Linux 시스템의 경우 -f
플래그는 readlink
( --canonicalize
)입니다. «지정된 이름을 가진 모든 구성 요소의 모든 심볼릭 링크를 반복적으로 추적하여 정규화합니다.» 당신을 위해 그것을 해줄 것입니다:
touch /tmp/real
ln -s /tmp/real /tmp/link
readlink -f /tmp/real # → "/tmp/real"
readlink -f /tmp/link # → "/tmp/real"
Mac OSX 시스템의 경우 이를 수행할 수 있는 옵션이 없습니다. «주어진 인수가 심볼릭 링크가 아니면 readlink
아무 것도 인쇄되지 않고 오류와 함께 종료됩니다.».
readlink
두 시스템 모두 문서와 사용 가능한 모든 옵션을 찾을 수 있습니다 man readlink
.
OSX에서 범용 솔루션에 가장 근접하게 접근할 수 있는 기능은 다음과 같습니다.
readlinkorreal() { readlink "$1" || echo "$1"; }
readlinkorreal /tmp/real # → "/tmp/real"
readlinkorreal /tmp/link # → "/tmp/real"
답변2
다음과 같은 파일 구조를 고려하면:
test/
├── link -> no-link
└── no-link
이 -m
옵션이 효과가 있는 것 같습니다.
florin@debian:/tmp/test$ readlink -m link
/tmp/test/no-link
florin@debian:/tmp/test$ readlink -m no-link
/tmp/test/no-link
답변3
readlink -f
@roaima의 답변에서 언급한 대로 이렇게 하세요.
macOS 12.3에는추가된 지원이 옵션의 경우 이제 Linux 및 macOS에서 사용할 수 있습니다.