명령어를 입력하는 경로 기준이 아닌, 파일 기준으로 상대 경로 잡는 방법?
조회수 7998회
잘 모르는 부분이라 제목이 이상해지네요.
쉘스크립트로 작성한 명령어가 해당 스크립트를 어느 위치에서 실행하느냐에 따라 결과가 달라지던데요. 가령:
#!/bin/sh
pwd
이런 스크립트를
home
ㄴ parent
ㄴ child
ㄴ test.sh
위와 같은 폴더 구조에서 실행할 때,
실제 실행 결과:
- parent에서 실행: /home/parent
- child에서 실행: /home/parent/child
이렇게 결과가 달라지는데요. 어느 위치에서 파일을 실행하던지 (환경변수 등으로 절대경로를 잡는 방법을 제외하고) 실제 파일이 위치한 경로를 기준으로 결과를 고정시킬 수는 없을까요?
원하는 실행 결과:
- parent에서 실행: /home/parent/child
- child에서 실행: /home/parent/child
이런 결과가 나오도록 말이죠.
좀 더 구체적인 예를 들자면,
home
ㄴ parent
ㄴ child
ㄴ test.sh
ㄴ script
ㄴ execute-me.sh
test.sh
#!/bin/sh
../script/execute-me.sh
execute-me.sh
#!/bin/sh
echo hello world!
파일의 경로와 내용이 위와 같을 때, 어느 경로에서 test.sh를 실행해도 결과가 같도록 하고 싶습니다. 지금 이 상태로는 test.sh를 home/parent/child 에서 실행하지 않으면 execute-me.sh를 찾지 못하거든요.
물론,
../script/execute-me.sh
대신 /home/parent/script/execute-me.sh
라고 절대경로로 작성하면 되겠지만 제가 원하는건 이게 아닌데요. 다른 방법이 있을까요?
2 답변
-
-
export WORK_HOME=/home/.../... WORK_HOME/script.sh
보통 위와 같이 처리하는게 일반적입니다.
- 그러니까 WORK_HOME으로 /home/parent/script 절대경로를 잡고 $WORK_HOME/execute-me.sh로 실행하라는 말인가요? 그런데 이 방법은 문제가 execute-me.sh 라는 파일이 정확히 의도한 경로에 있지 않으면 실행이 안될텐데, 어느 경로에 있어도, 예를 들어 home이 아닌 home2 아래에 위치하더라도 정상 작동하게 할 방법은 없을까요? 편집요청빌런 2017.4.26 12:36
- 그렇다면 path에 넣어도 되겠죠. export PATH=$PATH:/home/.../... 정영훈 2017.4.26 13:09
- 답변의 요지는 절대경로로 잡으라는것 같은데... 제가 이해한게 맞나요? 편집요청빌런 2017.4.26 13:26
- 궁극적으로 절대경로가 맞고 path에 추가하면 되지 않을까 싶습니다. 정영훈 2017.4.26 15:22
댓글 입력