내가 시도한 간단한 스크립트는 다음과 같습니다.
#!/bin/bash DIR="$(cd "$(dirname $0)" && pwd)" echo $DIR
실행하면 $ ./my_script.sh
경로가 올바르게 얻어집니다.
하지만 이렇게 하면 $ source my_script.sh
경로가 표시됩니다./bin
소스를 통해 스크립트 경로를 얻는 방법은 무엇입니까?
소스 코드와 실행 코드의 차이점은 무엇입니까?
답변1
스크립트 가져오기와 "실행"의 차이점은 스크립트를 가져오면( source
또는 사용 .
) 현재 쉘 환경에서 스크립트가 실행되는 반면, "실행"하면 새 쉘 프로세스가 시작된다는 것입니다. 소스 스크립트가 현재 쉘 환경을 변경하기를 원합니다. 별도의 쉘 프로세스에서 실행되는 스크립트는 다음을 수행할 수 있습니다.아니요상위 쉘의 환경을 변경하십시오. "환경"은 쉘과 환경 변수의 값, 현재 작업 디렉토리 등을 의미합니다.
스크립트는 소스 코드를 얻거나 자체 쉘 환경에서 실행하기 위해 작성되는 경우가 많지만 두 가지 모두를 수행하는 경우는 거의 없습니다. 소스를 가져오는 스크립트를 "도트 스크립트"라고도 합니다( .
해당 스크립트를 가져오는 표준 명령 이기 때문에 "별칭" source
이기 때문입니다 ).bash
.
쉘에서 얻은 도트 스크립트는 bash
배열의 첫 번째 요소를 확인하여 위치를 찾을 수 있습니다 BASH_SOURCE
.
printf 'My location: %s\n' "$( dirname "${BASH_SOURCE[0]}" )"
디렉터리 경로는 호출 시 source
또는 .
스크립트의 현재 작업 디렉터리를 기준으로 합니다.