쉘스크립트로 문자열의 일부 비교가 가능하나요.

s0me의 이미지

$PWD 에서 절대경로인지 상대경로인지를 파악하려고 합니다.

궁극적인 목적은 현재 실행된 파일의 절대경로에서 디렉토리 부분만 구하는 것인데요.
상대 경로를 쓸때와 절대 경로를 쓸때 $PWD 와 $0의 값이 다르므로
절대/상대를 파악해서 이 두 값을 합쳐서 하나의 경로를 만들려고 합니다.

절대일경우
dirname $PWD

하면 바로 구할 수 있을것 같구요.

상대 경로일 경우

dirname ($PWD + $0)

하면 가능할 것 같은데.. 다른 방법이 있으면 부탁 드립니다.

C의 문법을 빌리자면

if($PWD[0] == '/')
// 절대 경로
else
// 상대 경로

와 같은 쉘스크립트를 만들려고 합니다.

alfalf의 이미지

아래처럼 하시면 될것 같네요.

if [ "${PWD:0:1}" == "/" ]
then
# 절대 경로 
else
# 상대 경로 
fi
익명 사용자의 이미지

즉 PATH에 걸려있는 프로그램은 언제
어디에서나 실행 되기 때문에 실제
실행되는 프로그램의 위치를 아실 수 는 없습니다.
별도로 whence와 비슷한 구현을 하셔야 합니다.

^^;

익명 사용자의 이미지

s0me wrote:

궁극적인 목적은 현재 실행된 파일의 절대경로에서 디렉토리 부분만 구하는 것인데요.

dir=`pwd` 아닌가요?
익명 사용자의 이미지

추가로, 문자열 포함했는지는 다음과 같이 할 수 있습니다.

#!/bin/sh

# returns OK if $1 contains $2
strstr() {
  [ "${1#*$2*}" = "$1" ] && return 1
  return 0
}

if strstr "${PWD:0:1}" "/" ; then
    echo 'true'
fi

근데 역시 `pwd`가 목적이 아닌지?