.foo.sh
내보내기만 포함된 파일이 있습니다.
export foo="../../../../"
export bar="a/b/c/d/"
export baz="a/b/c/d/e/f"
스크립트에서 파일의 소스는 다음과 같습니다(스크립트의 다른 어떤 것도 이에 영향을 미치지 않는 것을 확인했으며 테스트 스크립트는 이 작업만 수행합니다).
!#/bin/bash
cd u/v/x/y/z/
source .foo.sh
그러나 환경 변수가 올바르게 설정되지 않았습니다. echo "foo $foo bar $bar baz $baz"
소싱 전후에 추가 하면 다음과 같은 결과가 나타납니다.
foo bar baz
foo . bar .. baz ../e/f
추가하면 cat .foo.sh
스크립트가 다음과 같이 표시됩니다.
!#/bin/bash
cd u/v/x/y/z/
cat .foo.sh
echo "foo $foo bar $bar baz $baz"
source .foo.sh
echo "foo $foo bar $bar baz $baz"
나는 다음과 같은 결과를 얻습니다.
export foo="../../../../"
export bar="a/b/c/d/"
export baz="a/b/c/d/e/f"
foo bar baz
foo . bar .. baz ../e/f
소스 줄을 다음과 같은 내용으로 바꾸면 .foo.sh
:
!#/bin/bash
cd u/v/x/y/z/
echo "foo $foo bar $bar baz $baz"
export foo="../../../../"
export bar="a/b/c/d/"
export baz="a/b/c/d/e/f"
echo "foo $foo bar $bar baz $baz"
나는 다음과 같은 결과를 얻습니다.
foo bar baz
foo ../../../../ bar a/b/c/d/ baz a/b/c/d/e/f
소스 파일이 CWD에 있고 내보낸 경로가 하드코딩된 문자열인데도 인라인으로만 내보낼 때와 비교하여 소스 파일로 내보낼 때 경로가 다른 디렉터리에 상대적으로 변경되는 이유는 무엇입니까?
답변1
.foo.sh
my에 나열된 디렉토리에 PATH
동일한 변수를 내보내지만 다른 값을 갖는 파일이 있습니다. 일반적인 명령을 실행하는 것처럼 파일을 가져올 때 쉘은 먼저 PATH
. which .foo.sh
실행 파일처럼 아무것도 반환되지 않는다는 점을 고려하면 더욱 혼란스럽습니다. 그러나 스크립트를 이와 같은 소스로 변경하면 source ./.foo.sh
문제가 해결되었습니다.