#TIL #bash #batch 스크립트 파일이 있는 부모 디렉터리로 cd
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 해줘야 스크립트 실행 후 작업 디렉터리가 바뀌지 않는다.