TL;DR

  • 쉘 스크립트를 쓰다 보면 경로에 대해 다뤄야 할 일이 있을 수 있는데 이때 사용할 수 있는 여러 방법들을 알아보자.

pwd

  • 일단 pwd 는 현재 위치의 절대 경로를 뱉는다.
pwd
  • 근데 문제는 이것을 쉘 스크립트에서 사용하면 스크립트가 있는 경로가 아니라 스크립트를 실행한 곳의 경로가 나온다.
  • 근데 만약에 스크립트에서 이놈이 준 경로를 기준으로 해서 다른 위치의 파일을 읽는다는지 하면 당연히 문제가 생긴다.

dirname

  • 그래서 쉘 스크립트를 실행한 경로가 아닌 스크립트가 존재하는 경로를 알아내고싶다면, dirname 을 사용하면 된다.
dirname $0
  • 여기서 $0 은 스크립트 파일의 이름이 자동으로 들어가게 되고, 이것이 dirname 의 인자로 들어가 스크립트 파일이 존재하는 경로가 출력되게 되는것이다.

상대경로를 절대경로로 바꾸기

  • 근데 dirname 을 쓰면 상대경로가 나오게 된다.
  • 만약에 상대경로가 아니라 절대경로가 필요하면 어떡할까? 가령 경로를 sed 같은걸로 바꿔서 접근하고자 한다면?
  • 그럼 cdpwd 를 사용하면 된다.
  • 쉘 스크립트 내에서 cd 를 쓰면 (스크립트는 sub-process 로 돌아가기 때문에) 스크립트 내에서만 경로가 바뀐다.
  • 이것과 pwd 를 이용하면 상대경로를 절대경로로 바꾸는 스크립트를 짤 수 있다.
echo $(cd $상대경로 && pwd)