source
현재 셸에 영향을 주기 위해 명령을 통해 실행하는 일부 환경 변수를 설정하는 셸 스크립트가 있습니다 . 나는 이 쉘 스크립트를 참조하는 또 다른 쉘 스크립트를 만들었고, 다른 쉘 스크립트 내에서 이를 호출하는 것이 현재 쉘에서 직접 호출하는 것과 동일한 효과를 가질 것이라고 생각했지만 source
분명히 그렇지 않습니다. 실행 중인 셸에 적용되는 모든 항목이 현재 셸에 반영되어야 한다고 이 호출자 스크립트에 지시하는 방법이 있습니까?
환경 변수가 있는 스크립트는 다음과 같이 시작 set -a
하므로 다음과 같은 작업을 수행하고 싶습니다.
$(cat env_script.sh)
모든 것을 호출 쉘로 내보낼 것이지만 그것도 작동하지 않는 것 같습니다.
답변1
귀하의 접근 방식은 두 가지 이유로 작동하지 않습니다.
먼저, env_script.sh에 다음과 같은 변수를 설정하는 명령문이 포함되어 있다고 가정해 보겠습니다.
X=5
이 명령문이 실행되면
$(cat env_script.sh)
bash에게 명령으로 수행하도록 요청하는 것은 흥미로운 이름을 가진 프로그램을 실행하는 이 스크립트를 실행하는 것입니다 X=5
.
따라서 정의를 셸로 가져오는 올바른 방법은 다음과 같습니다.
. env_script.sh
두 번째 문제는 귀하의 글을 바탕으로 변수가 "호출자 스크립트"에 전파되기를 원한다는 것입니다. "호출자 스크립트"가 정확히 무엇을 의미하는지 완전히 명확하지는 않지만, 이 호출자 스크립트가 그 반대가 아닌 경우구입작성하려고 하지만 하위 프로세스로 호출하려는 스크립트는 기술적으로 변수를 호출자에게 직접 전달할 수 없습니다.
간단히 말해서, 쉘이 변수를 설정해야 하고 설정이 별도의 파일에 정의되어 있는 경우 다음이 필요합니다.원천가져오라는 명령입니다.
답변2
이것은 예이다
#!/bin/bash
CURR_DIR=$(dirname $(readlink -f $0))
. ${CURR_DIR}/set-env-script.sh
# Add here your code...