문제
현재 받아 들여지는 대답은 중요한 조건에서만 작동합니다. 주어진...
/foo/bar/first.sh
:
function func1 {
echo "Hello $1"
}
과
/foo/bar/second.sh
:
#!/bin/bash
source ./first.sh
func1 World
이것은이 first.sh
있는 동일한 디렉토리 내 에서이 실행되는 경우에만 작동합니다 first.sh
. 즉. 쉘의 현재 작업 경로가 /foo
인 경우 명령 실행 시도
cd /foo
./bar/second.sh
오류를 인쇄합니다.
/foo/bar/second.sh: line 4: func1: command not found
이는 source ./first.sh
스크립트의 경로가 아니라 현재 작업 경로에 상대적 이기 때문 입니다. 따라서 한 가지 해결책은 서브 쉘을 활용하고
(cd /foo/bar; ./second.sh)
보다 일반적인 솔루션
주어진...
/foo/bar/first.sh
:
function func1 {
echo "Hello $1"
}
과
/foo/bar/second.sh
:
#!/bin/bash
source $(dirname "$0")/first.sh
func1 World
그때
cd /foo
./bar/second.sh
인쇄물
Hello World
작동 원리
$0
실행 된 스크립트의 상대 또는 절대 경로를 반환합니다.
dirname
$ 0 스크립트가있는 디렉토리의 상대 경로를 반환합니다.
$( dirname "$0" )
dirname "$0"
명령은 다음에 대한 인수로 사용되는 실행 스크립트의 디렉토리에 상대 경로를 반환 source
명령
- "second.sh"에서
/first.sh
가져온 쉘 스크립트의 이름 만 추가합니다.
source
지정된 파일의 내용을 현재 쉘로로드합니다.