저는 최근에 몇몇 스크립트를 작업 해왔고 'utils'와 같은 다른 파일의 일부 공통 기능을 분리하고 내 기본 스크립트로 가져 오는 것이 정말 유용하다는 것을 알았습니다. 이를 위해 source ./utils.sh
을 사용했습니다. 그러나,이 접근 방식은 내가 메인 스크립트를 호출하는 곳에서 현재 경로에 의존하는 것으로 보인다.파이썬에서와 같은 방식으로 bash에서 모듈을 가져올 수있는 방법이 있습니까?
의 내가이 폴더 구조를 가지고 있다고 가정 해 봅시다 :
scripts/
|-tools/
| |-utils.sh
|-main.sh
main.sh
에 :
source ./tools/utils.sh
some_function_defined_on_utils_sh
...
을 나는 모든 것이 잘 작동 main.sh
폴더 scripts/
에서 실행합니다. 하지만 다른 디렉토리에서 실행하면 ./scripts/main.sh
./tools/utils.sh
을 찾을 수 없으므로 스크립트가 실패합니다.
왜 이것이 작동하지 않는지 이해합니다. 내 질문은 내 스크립트에 '모듈'을 가져 오는 다른 메커니즘이 있고 현재의 모든 것을 불가지론 자로 만듭니다 (파이썬 스크립트와 마찬가지로 from utils import some_function_defined_on_utils_sh)
)
고마워요!
엄밀히 말하면, 아니요. 'source'에 대한 인수는 절대 경로 이름, 상대 경로 (현재 작업 디렉토리에 대한) 경로 이름 또는'PATH' 조회를 통해 발견 된 파일 이름입니다. – chepner