일부 자동화 목적으로 csh 스크립트를 사용합니다. 나는 많은 스크립트를 가지고 있으며 모든 스크립트의 시작 부분에서 고정된 환경 변수 세트를 설정해야 합니다.
|----SCRIPT 1---| |----SCRIPT 2---|
|# set env vars | |# set env vars |
| | | |
|# do something | |# do something |
| | |# else |
그래서 모든 환경 변수를 다른 스크립트에 넣고 각 파일에서 가져오고 싶습니다. 그런데 소스 스크립트 내부에서 설정한 환경 변수가 외부에는 반영되지 않는 것으로 나타났습니다. 내가 원하는 것을 달성할 수 있는 깨끗한 방법이 있나요? 아니면 모든 스크립트에서 명시적으로 환경 변수를 설정해야 합니까?
고쳐 쓰다:
파일을 가져오는 동안 "tee" 명령을 사용하여 출력을 파일로 파이프합니다. 파이프를 제거한 후 스크립트 파일이 작동하는 것을 확인했습니다.
답변1
예, 파이프된 출력은 source
서브셸에서 파이프라인의 해당 부분을 실행합니다. 즉, 다른 파일의 소스에서 설정된 환경 변수는 스크립트 환경에 영향을 미치지 않습니다.
예:
environment.csh
:
setenv string "hello world"
echo 'The environment is now set up'
script.csh
:
#!/bin/csh
source environment.csh | tee output
printf 'string is "%s"\n' "$string"
실행 결과는 script.csh
다음과 같습니다.
The environment is now set up
string: Undefined variable.
tee
출력되도록 파이프를 제거하십시오.
The environment is now set up
string is "hello world"