source

스크립트 실행과 관련된 파일 참조

factcode 2023. 4. 29. 09:54
반응형

스크립트 실행과 관련된 파일 참조

내가 쓰고 있는 바시 스크립트에서, 나는 사용합니다.source구성 파일에 정의된 변수를 포함합니다.실행할 스크립트는 다음과 같습니다.act.sh대본이 있는 동안에source디스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제대로 확장하지 못할 때 편리한 오류 조건을 얻을 수 있기 때문에 사용자에게 적합한 경우.

자세한 내용은 다음을 참조하십시오. Bash: 다른 스크립트를 포함하는 _best_ 방법을 참조하십시오.

다음을 사용할 것을 제안합니다.

source $(dirname $0)/act.conf.sh

스크립트 위에 추가합니다.그런 다음 스크립트의 위치와 관련하여 모든 후속 코드가 실행됩니다.

cd "$(dirname "${BASH_SOURCE[0]}")"

다음을 시도합니다.

source ${BASH_SOURCE[0]/%act.sh/act.conf.sh}

언급URL : https://stackoverflow.com/questions/6659689/referring-to-a-file-relative-to-executing-script

반응형