작성중인 bash 스크립트 source
에서 구성 파일에 정의 된 변수를 포함하는 데 사용합니다. 실행할 스크립트는 act.sh
이고 스크립트 source
는 d act.conf.sh
이므로 다음과 act.sh
같습니다.
source act.conf.sh
그러나 이것은 작업 디렉토리 아래에있는 파일을 참조하기 act.sh
때문에이를 포함하는 디렉토리에서 실행할 때만 작동합니다 act.conf.sh
. 호출하지 않고 실행 스크립트와 관련된 파일을 참조하도록 만드는 솔루션이 cd
있습니까? 감사.
답변
참조 : BASH FAQ 항목 # 28 : “스크립트의 위치를 어떻게 결정합니까? 같은 위치에서 일부 구성 파일을 읽고 싶습니다.”
어떤 솔루션도 100 % 작동하지 않을 것입니다.
일반적으로이 문제에는 해결책이 없다는 것을 인식하는 것이 중요합니다. 들어 보셨을 수있는 접근 방식과 아래에서 자세히 설명 할 접근 방식에는 결함이 있으며 특정 경우에만 작동합니다. 우선, 스크립트 위치에 의존하지 않고 문제를 완전히 피하십시오!
매우 재사용 가능한 도구 를 작성해야하는 경우 올바른 경로를 스크립트의 매개 변수로 사용하는 것이 가장 신뢰할 수있는 방법 입니다.
스크립트가 특정 셸에서만 실행되고 약간의 유연성 만 필요하다고 가정하면이 편집증을 완화 할 수 있습니다. 귀하의 옵션을 살펴 보는 것은 여전히 좋습니다. 특히 문제가되는 사람들이 사용하는 일반적인 패턴이 있습니다.
특히 FAQ에서는 매우 일반적으로 사용되는 $0
변수를 피할 것을 권장 합니다.
그 자체가 신뢰할 수
$0
없기 때문에 읽는 것은 결코 방탄이 될$0
수 없습니다.
대안으로 $BASH_SOURCE
대신 사용할 수 있습니다 . 이 같은:
source "${BASH_SOURCE%/*}/act.conf.sh"
이 솔루션에도 몇 가지주의 사항이 있습니다. 다양한 솔루션 간의 장단점을 보려면 FAQ 페이지를 확인하십시오. 제대로 확장되지 않을 때 편리한 오류 조건이 발생하므로 작동하는 경우 cd
와 함께 권장 하는 것 같습니다 $BASH_SOURCE
.
답변
답변
다음을 시도하십시오.
source ${BASH_SOURCE[0]/%act.sh/act.conf.sh}
답변
나는 보통 내 스크립트 위에 이것을 추가합니다.
cd $(dirname $BASH_SOURCE)
그런 다음 모든 후속 코드가 해당 스크립트 경로를 기준으로 실행됩니다.