쉘 스크립트를 사용하여 환경 변수 설정

쉘 스크립트를 사용하여 환경 변수 설정

일부 자동화 목적으로 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"

관련 정보