스크립트를 실행할 때 현재 실행한 스크립트의 절대경로를 구해야 하는 경우가 있다.

절대경로를 구하는 명령어가 있는것 같지만 OS 국한적으로 그런 명령어를 가지고 있지않은 OS 또한 있다.

내가 만든 방법은 아래와 같다.
#!/bin/sh
EXEC_FILE="$0"
BASE_NAME=`basename "$EXEC_FILE"`
if [ "$EXEC_FILE" = "./$BASE_NAME" ] || [ "$EXEC_FILE" = "$BASE_NAME" ]; then
        FULL_PATH=`pwd`
else
        FULL_PATH=`echo "$EXEC_FILE" | sed 's/'"${BASE_NAME}"'$//'`
        cd "$FULL_PATH"                 > /dev/null 2>&1
        FULL_PATH=`pwd`
fi

설명을 하자면,

먼저 스크립트를 실행한 이름으로 base name을 구하고,

./으로 실행한 스크립트 또는 이름으로 실행한 스크립트이면, 실행위치에서 pwd로 절대경로를 구했고,

상대경로로 실행하거나 경로에 링크가 걸려있다면, 실행 경로의 끝에 위치한 스크립트 이름만 제거하고,
 
그경로로 이동한 후 pwd로 절대경로를 구한 것이다.

FULL_PATH 변수를 찍어 보면 절대경로가 들어가 있는것을 볼 수 있다.

쉽게 만들지는 못했지만, 예전에 kldp에 질의도 하고해서 만든 결과로 정리 차원에서 글을 써본다.
Posted by dcmru
,