less than 1 minute read

cd "$(dirname "$0")/.."

bash에서는 $0 스페셜 파라미터를 사용한다.

$ cat script_path_test
echo "$(dirname "$0")/.."

이런 스크립트 파일이 있을 때, 어디에서 실행하느냐에 따라 출력 결과가 달라진다.

$ pwd
/c/Users/ohyecloudy/test

$ ./script_path_test
./..

스크립트 파일이 있는 디렉터리에서 실행한 결과.

$ pwd
/c/Users/ohyecloudy

$ test/script_path_test
test/..

부모 디렉터리에서 실행한 결과.

다른 디렉터리에서 실행할 수 있기 때문에 그냥 cd .. 명령을 쓰면 안 된다. 대신 $0 스페셜 파라미터를 사용하면 된다. 위 예에선 각각 ./script_path_test, test/script_path_test로 확장한다. dirname을 사용해 디렉터리를 추출하고 부모 디렉터리로 cd를 하면 스크립트 파일이 있는 부모 디렉터리로 작업 디렉터리를 바꿀 수 있다.

pushd %cd%
cd %~dp0..
popd

batch 스크립트에서는 %~dp0 스페셜 파라미터를 사용하면 된다. 스크립트 환경 분리가 안 돼서 현재 디렉터리를 push, pop 해줘야 스크립트 실행 후 작업 디렉터리가 바뀌지 않는다.

링크