Windows 의 %~dp0 와 비슷한 것을 하면서 더 많은 것을 하는 예제 코드
#!/bin/bash
# 현재 스크립트 파일을 SOURCE로 가져옴
SOURCE="${BASH_SOURCE[0]}"
# SOURCE가 가르키는 파일이 심볼릭이명 계속 따라감
while [ -h "$SOURCE" ]; do
TARGET="$(readlink "$SOURCE")"
if [[ $TARGET == /* ]]; then
# 절대 경로로 생성된 심볼릭 링크
echo "SOURCE '$SOURCE' is an absolute symlink to '$TARGET'"
SOURCE="$TARGET"
else
# 상대 경로로 생성된 심볼릭 링크
# SOURCE의 디렉토리 + 상대 경로로 링크 대상 경로를 생성
DIR="$( dirname "$SOURCE" )"
echo "SOURCE '$SOURCE' is a relative symlink to '$TARGET' (relative to '$DIR')"
SOURCE="$DIR/$TARGET"
fi
done
# 심볼릭 아닌 소스를 찾음
echo "SOURCE is '$SOURCE'"
# 스크립트 소스의 작업 디렉토리로부터의 상대 경로를 구함
RDIR="$( dirname "$SOURCE" )"
# 상대 경로로 이동해서 pwd로 절대 경로를 확인
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
if [ "$DIR" != "$RDIR" ]; then
echo "DIR '$RDIR' resolves to '$DIR'"
fi
echo "DIR is '$DIR'"
결과
SOURCE './scriptdir.sh' is a relative symlink to 'sym2/scriptdir.sh' (relative to '.')
SOURCE is './sym2/scriptdir.sh'
DIR './sym2' resolves to '/home/ubuntu/dotfiles/fo fo/real/real1/real2'
DIR is '/home/ubuntu/dotfiles/fo fo/real/real1/real2'