2009-09-23 9 views
74

bash 스크립트에서 전역 환경 변수를 설정하는 방법은 무엇입니까?쉘 스크립트의 전역 환경 변수

나는 물건

#!/bin/bash 
FOO=bar 

... 또는

#!/bin/bash 
export FOO=bar 

처럼 ... 바르 난 후에 계속 사용하고 싶습니다 반면, 로컬 컨텍스트에 머물 것으로 보인다 할 경우 스크립트가 실행을 마쳤습니다.

답변

121

는 현재 쉘 환경에서 스크립트를 실행합니다 .

. myscript.sh 

이 당신의 스크립트를 실행합니다.

export 변수가 새로운 프로세스를 사용할 수있는 지배, 그래서 당신은

FOO=1 
export BAR=2 
./runScript.sh 

을 말한다면 다음 $BARrunScript.sh의 환경에서 사용할 수 있지만 $FOO은하지 않습니다.

+24

처음주의하십시오. 슬래시가 없으면 경로에서 보일 것입니다 : '와 같은 것을 사용하십시오. ./myscript.sh '가 특정 스크립트를 실행하는지 확인하려는 경우. – paxdiablo

+1

전 세계가 글로벌이라고 생각했습니다 !!! 이것은 문제 해결의 마지막 1 시간을 지 웁니다. – Dennis

+8

'source'는'.'의 별칭입니다. 그래서 당신이 더 명시 적으로하고 싶다면'source myscript.sh'를 대신 실행할 수 있습니다. –

-3
FOO=bar 
export FOO 
+2

, 그것은 부모 프로세스의 환경 변수를 설정하지 않습니다. – dreamlax

+3

상위 프로세스 만 환경 변수를 설정할 수 있습니다. –

45

셸 스크립트를 실행하면 하위 셸에서 수행되므로 상위 셸 환경에 영향을 미치지 않습니다. 당신은 수행하여 스크립트 소스하려면 :

. ./setfoo.sh 

이 아닌 서브 쉘과 같이 현재 쉘의 맥락에서 그것을 실행합니다. bash는 남자 페이지에서

:

. 파일 이름 [인수]
소스 파일 이름 [인수]

읽고는 현재 쉘 환경에서 파일 이름에서 명령을 실행하고 마지막 명령의 종료 상태는 파일 이름에서 을 실행 돌아갑니다.

파일 이름에 슬래시가 없으면 PATH의 파일 이름을 사용하여 에 filename이 들어있는 디렉토리를 찾습니다.

PATH에서 검색 한 파일을 실행할 필요가 없습니다. POSIX 모드에서 bash가 이 아닌 경우, 파일이 발견되지 않으면 현재 디렉토리가 검색됩니다. PATH.

shopt 기본 제공 명령에 대한 sourcepath 옵션이 해제되어있는 경우 PATH가 검색되지 않습니다.

인수가 제공되면 filename이 실행될 때 위치 매개 변수 이됩니다.

그렇지 않으면 위치 매개 변수가 변경되지 않습니다.반환 상태 은 스크립트 내에서 마지막으로 종료 된 명령의 상태입니다 ( 명령이 실행되지 않으면 0). filename이 없거나 을 읽을 수없는 경우 false입니다.

+0

흥미 롭습니다 - 이전에 그 구문을 보지 못했습니다. 이것은 소스 ./setfoo.sh와 동일합니까? –

+2

똑같은 방식으로 입력하는 것이 더 빠르며 (예전 시스템에서는 호환 가능합니다. ksh에는 소스 명령이 없지만 '.'이 있습니다). – paxdiablo

4
#!/bin/bash 
export FOO=bar 

또는

#!/bin/bash 
FOO=bar 
export FOO 

남자 수출 :

그들이에 원인이 될 것이다 지정된 이름에 해당하는 변수로 반출 속성을하여야한다 셸 환경에서 실행됩니다. 변수의 이름 다음에 = word가 오는 경우 해당 변수의 값은 word로 설정됩니다.

+0

쉘 스크립팅의 모든 초보자에게 : envvar 이름, '='문자와 값 자체 사이에 공백이 없으므로주의하십시오. 이것은 작동하지 않을 것입니다 :'export FOO =/mydir/bar' – russellhoff

6

source myscript.sh 또한 가능하다. 리눅스 명령 source에 대한

설명 :이 문제가 해결되지

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context 
+0

여기에 더 많은 정보가 있습니다. '소스'가 무엇을하는지에 대한 간단한 설명은 어떨까요? –

+0

@PhillipCloud 유형의 'man source'가 터미널에 있으면 원하는 것을 얻을 수 있습니다. – CDT

+5

나는 '소스'에 익숙하다. 어쩌면 OP가 아닌 것 같습니다. –