2009-11-11 7 views
2

두 개의 스크립트가 있는데 첫 번째 부분은 똑같이 보입니다. 이 부분의 기능은 스크립트가 실행될 머신을 식별하고 이에 따라 몇 가지 변수를 설정하는 것입니다.하나의 쉘 스크립트에서 다른 쉘 스크립트로 변수를 내 보냅니다.

ENV=`echo $LOGNAME | cut -c1-8` 
if [ $ENV = "vrt3400b" ] 
then 
    echo "Using TEST specific settings." 
    NAME_PREFIX="tst" 
    GROUP_NUMBER=`echo $USER | cut -c4-5` 
    GROUP_NUMBER_SUFFIX=00`echo $USER | cut -c8-9` 
    ... 
elif [ $ENV = "vrp3400a" ] 
then 
    echo "Using PROD specific settings." 
    NAME_PREFIX="prd" 
    ... 

문제는 스크립트의 수가 증가하면 작은 변경 사항을 유지하는 데 소요되는 시간이 매우 오래 걸리는 것입니다.

위의 부분을 추출하여 별도의 스크립트에 넣은 다음 다른 모든 스크립트에서 호출합니다. 그러나 변수는 물론 다른 스크립트로 전달되지 않습니다. 그래도 export NAME_PREFIX="tst"을 시도했지만 작동하지 않았습니다.

아무도 나에게 문제를 해결하는 데 사용해야하는 접근법에 대한 힌트를 줄 수 있습니까?

나는 환경을 식별하는 것에 대해 생각하고 파일에 속성을 쓰고 다른 스크립트로 전달할 수 있습니다. 그러나보다 직설적 인 접근이 있어야하는 것으로 보인다.

// 마이크

+0

초기화 스크립트 (1.sh)

a=123 b=abc export a b 

응용 프로그램 스크립트? –

답변

6

사용중인 쉘

#!/bin/sh 

. 1.sh 

echo \$a: $a 
echo \$b: $b 
+1

"#!/bin/sh"를 사용하고있었습니다. 하지만 당신의 대답은 '출처'가 '로 대체 될 수 있다는 결론에 이르게합니다.' bash가 사용되지 않는 경우. 큰! – Mike

+0

쿨! bash에서도 잘 작동합니다. 나는 그것을 반영하기 위해 나의 대답을 바꿀 것이다. –

+2

"자녀"라는 스크립트 (예 : 두 번째 스크립트)의 환경에 변수를 표시하지 않으려면 반드시 변수를 내 보내야한다고 생각하지 않습니다. –

관련 문제