bash 스크립트에서 디렉토리의 전체 경로를 저장하는 방법은 무엇입니까?

bash 스크립트에서 디렉토리의 전체 경로를 저장하는 방법은 무엇입니까?

사용자가 "./" 또는 "/~"를 입력하더라도 스크립트에서 전체 경로 디렉터를 가져오고 싶습니다.

#!/bin/bash
echo "Enter the directory"
read DIRECTORY #how to store the full-path instead of something like ./
echo "$DIRECTORY"

답변1

사용실제 경로:

echo "$(realpath $DIRECTORY)"

답변2

pwd디렉터리의 경우 명령 이나 변수를 사용할 수 있습니다 $PWD.

$ DIRECTORY=.
$ TRUEDIR=$(cd -- "$DIRECTORY" && pwd)
$ echo $TRUEDIR
/home/steve
$

답변3

절대 경로는 로 시작 /하지만 상대 경로는 그렇지 않습니다. 현재 디렉터리에 경로를 추가하고 상대 경로 앞에 슬래시를 추가하여 상대 경로를 절대 경로로 변환할 수 있습니다.

case $DIRECTORY in
  /*) DIRECTORY="$PWD/$DIRECTORY";;
esac

이것은 이식 가능한 코드입니다. bash뿐만 아니라 순수 sh에서도 실행될 수 있습니다.

생성된 경로에는 기호 링크가 포함될 수 있습니다. 이는 거의 항상 옳은 일이지만, 심볼릭 링크를 정규화하려면 다음을 참조하세요.심볼릭 링크 없이 상대 경로를 절대 경로로 변환

답변4

realpath(허용되는 답변)는 더 이상 사용되지 않으며 대부분의 설치에서 사용할 수 없습니다. 이에 대한 대안은 다음과 같습니다.

readlink -f "$DIRECTORY"

또한 ~ 및 ./도 처리하고 기호 링크를 따릅니다.

사용자가 존재하지 않는 $DIRECTORY를 입력하도록 허용하려면 다음을 사용하세요.

readlink -m "$DIRECTORY"

관련 정보