사용자가 "./" 또는 "/~"를 입력하더라도 스크립트에서 전체 경로 디렉터를 가져오고 싶습니다.
#!/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"