특정 명령의 정식 경로가 필요한 스크립트를 작성 중입니다. 실제 명령을 가리키는 심볼릭 링크가 있을 수 있으므로 readlink -f
정식 경로를 가져오는 데 사용합니다. 하지만 실제로 원하는 것을 얻지 못했습니다 readlink -f
. 다음 예를 통해 설명하겠습니다.
내 현재 디렉터리가 다음과 같다고 가정해 보겠습니다. with /home/user/Documents
경로를 얻으려고 하면 다음과 같은 결과가 나타납니다.sleep
readlink -f
/home/user/Documents/sleep
내가 실제로 원하는 것은/bin/sleep
답변1
readlink -f "$(type -P sleep)"
또는 성능에 민감한 경우:
cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"
readlink -e
대신 (기존)을 사용하면 readlink -f
존재하지 않는 파일을 작업하는 이런 종류의 사고를 예방할 수 있습니다.
두 번째 예에서는 에서 반환된 경로가 type -P
정규 경로라고 가정합니다. 즉, 경로에 비정규 구성 요소가 없다고 가정합니다.