Bash 스크립트 파일의 경로

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'

글쓴이

BS

BS == Programmer