스크립트 실행 후 내 보낸 변수가 지속되지 않습니다


8

나는 이상한 문제에 직면하고 있습니다. solaris 11이있는 vm을 가지고 있으며 bash 스크립트를 작성하려고합니다.

쉘에 다음을 입력하면 :

export TEST=aaa

그리고 다음을 실행하십시오.

set

값이 aaa 인 TEST라는 새 환경 변수가 올바르게 표시됩니다. 그러나 스크립트에서 기본적으로 동일한 작업을 수행합니다. 스크립트가 종료되면 변수 세트가 표시되지 않습니다. test.sh 파일에있는 경우 구체적인 예를 보려면 다음이 있습니다.

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

다음을 인쇄합니다.

1:
2: daniele
3: sss
4: sss

실행 후 TEST는 쉘에 설정되지 않습니다. 뭔가 빠졌습니까? 내보내기 TEST = sss와 별도의 변수 세트 / 내보내기를 아무런 차이없이 수행하려고했습니다.

답변:


15

export-자식 프로세스에는 사용할 수 있지만 부모에게는 사용할 수없는 변수를 만듭니다.

소스-자식 프로세스를 만들지 않고 쉘에서 스크립트 실행

exalmpe의 경우 파일에 쓰면 영속 변수를 실현할 수 있습니다

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST

이것은 또한 내가 달성하고 싶었던 것이 아니지만 당신의 요점을 얻었습니다. 감사.
Daniele

5

변수를 표시하려면 변수 source를 내보내는 스크립트 가 필요 합니다. 참조하십시오 man source.


1
아마도 소스 맨 페이지가없고 help source대신 bash에서 원할 것입니다.
스튜

스크립트를 직접 호출하면 (예 : 셸에서 내보내기를 사용하여 스크립트를 소싱하는 경우) 작동하지만 다른 스크립트 내에서 스크립트를 소싱하면 작동하지 않는 것 같습니다.
Daniele
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.