Linux 환경 변수 설정


9

Red Hat Linux Enterprise 5를 실행하고 있습니다. 항상 export 명령을 사용하여 환경 변수를 설정하고 있습니다.

환경 변수를 설정하는 다른 방법이 있습니까? 환경 변수의 장단점은 무엇입니까?

답변:


16

이것은 Bash 맨 페이지에서 발췌 한 것입니다.

export [-fn] [name [= word]] ...
export -p
제공된 이름은 이후에 실행되는 명령 환경으로 자동 내보내기하도록 표시됩니다. -f 옵션이 제공되면 이름은 함수를 나타냅니다.

현재 환경에서만 변수가 필요한 경우 내보내기를 사용할 필요가 없습니다.

var=value

편집하다:

내보내기없이 : 현재 환경 만. 내보내기 : 현재 환경 및 하위 환경.

다음은 자식 환경에서 변수의 가용성에 대한 내보내기의 영향에 대한 데모이며 자식 환경의 변경은 부모에 영향을 미치지 않습니다.

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []

첫 번째 에코 후 ( echo "parent...")는 모두 있기 때문에 "123"과 "456"을 참조 var1하고 var2현재의 환경에서 활성화됩니다. var3아직 설정되지 않았기 때문에 값이 표시 되지 않습니다.

" var3=..."(으)로 시작하는 줄 var1은 내 보내지 않았기 때문에 값 이 표시되지 않습니다. 당신은 값을 볼 수 var2가 있기 때문에 수출했다. var3하위 환경에 대해서만 설정 되었기 때문에 값이 표시 됩니다 .

( 옵션 bash -c에 대한 인수의 내용으로 스크립트를 실행하는 것과 같습니다 -c. 스크립트 또는 기타 실행 파일 또는이 경우 bash -c현재 환경의 자식이되는 인수 는 결과적으로 자식입니다. 부모의.)

"스크립트"에서 변수 값이 변경됩니다. 이제 새로운 값을 출력합니다.

"스크립트"가 완료되면 실행은 상위 환경 (이 경우 명령 행)으로 돌아갑니다. 마지막 에코 이후에는 자식 환경에서 변경 한 내용이 부모에 영향을 미치지 않기 때문에 원래 값이 표시됩니다.


"현재 환경"이란 무엇입니까? 현재 배쉬 스크립트 또는?
George2

1
예, "현재 스크립트에서"또는 "현재 대화식 세션에서"를 의미합니다. 따라서 현재 스크립트 또는 대화식 세션 내에서 실행되는 실행 파일 또는 스크립트는 제외됩니다. export이러한 하위 환경에서 변수를 사용할 수 있도록 하는 것이 목적입니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

나는 당신이 말한 것과 갈등이 있습니다. :-) "실행 파일 또는 스크립트를 제외합니다"라고 말하고 "제외"에주의를 기울 였지만 인용 한 내용에서 "제공된 이름은 이후에 실행되는 명령 환경으로 자동 내보내기하도록 표시되어 있습니다."라고 언급했습니다. - "제외"가 아닌 "포함"(자동 내보내기 또는 영향)이어야합니다. 혼란 스러워요, 당신은 제발 명확히 할 수 있습니까?
George2

1
@ George2 : 자세한 내용은 편집 한 답변을 참조하십시오.
추후 공지가있을 때까지 일시 중지되었습니다.

3

너는 ~라고 말한다

항상 export 명령을 사용하여 환경 변수를 설정하고 있습니다.

당신이 말한대로 환경 변수가 어떻게 지속되는지 어떻게 물어 보는 것처럼 들립니다. 이를 위해서는 export VAR="foo"$ HOME / .bash_profile 파일에 bash를 사용해야합니다 (bash를 사용하는 경우). 환경 변수를 루트 이외의 모든 사용자에 대해 유지하려면 / etc / profile에 추가하십시오. 루트 사용자에게도 추가하려면 /root/.bash_profile에서 설정하십시오.

이것은 bash가 선택한 쉘인 모든 로그인 쉘에서 작동합니다. 비 로그인 쉘의 경우 .bashrc를 사용해야합니다. 나는 다른 포탄을 제공 할 통찰력이 없다 : D


2
해당 파일이 언제 소스되는지에 관한 Bash 매뉴얼 페이지의 섹션을 다시 읽을 수 있습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1
네 ... 로그인과 대화식이 혼란 스러웠습니다. 내 답변을 수정하여 반영합니다. 정정 주셔서 감사합니다!
whaley

"환경 변수가 지속되도록"-지속성이 무엇을 의미합니까?
George2

1
"지속"은 쉘이 시작될 때마다이 변수가이 값을 갖기를 원한다는 것을 의미합니다. 목적에 따라 변수를 내 보내야 할 수도 있고 필요하지 않을 수도 있습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1
그것은 당신이 그것을 영구적으로 만들지 않았다는 것을 의미합니다. whaley가 묘사 한 것을 시도하십시오 .
추후 공지가있을 때까지 일시 중지되었습니다.

1

수출이 가장 간단한 방법이므로 수출하지 마십시오.

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells

2
Bourne 쉘에는 VARIABLE = value가 필요합니다. 수출 변수
mpez0

1
이것도 작동합니다 ...
Stack Overflow가 종료되었습니다

@BloodPhilia, bash의 경우 환경 변수를 설정하는 유일한 방법은 무엇입니까?
George2

1
@ George2-VARIABLE = value를 사용하면 현재 스크립트 실행 후 사라지는 로컬 변수를 작성합니다. 내보내기를 사용할 때 하위 프로세스는 상위 프로세스에서 변수 값을 상속합니다. 예를 들어 FOO=BAR; executethisprogram , 프로그램 executethisprogram은 variable 값을 알 수 없습니다 FOO. 반면에 다음을 사용할 때 : FOO=BAR; export FOO; executethisprogram 프로그램 executethisprogram은 variable의 값을 알게 FOO됩니다.
스택 오버플로가 종료

1
이 프로그램 은 "export FOO"의 하위 프로세스 가 아닙니다 . 스크립트 또는 대화식 (명령 줄) 셸을 호출하는 스크립트의 하위 프로세스 (하위)입니다. 명령이 실행 된 환경의 하위 프로세스에서 액세스 할 수 있도록 export FOO변수를 표시하는 명령입니다 FOO. 해당 부모는 스크립트 또는 대화식 쉘일 수 있습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1

다음과 같이 할 수도 있습니다 :

VAR=val application

예를 들면 다음과 같습니다.

LANG=C ls --help

영어로 출력.

LANG=pl_PL ls --help

폴란드어로 출력 (사용 가능한 경우).

과거에는 sh에서 VAL = val을 내보낼 수 없었습니다. 당신은해야했다

VAL=val; export VAL

"VAR = val application", val의 의미와 응용의 의미에 대해 혼란스러워합니다.
George2

2
이 예제 ls는 현재 (상위) 환경에서 해당 변수의 값에 영향을주지 않고 하위 환경에 대한 변수 값 (예 :)을 설정 합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

아이의 환경은 무엇입니까? 혼란 스러워요.
George2

1
ls프로세스가 실행 된 프로세스의 하위입니다. 내가 입력하면 ls명령 프롬프트에서 대화 형 쉘은 부모와 ls아이입니다. 내가 사용하는 스크립트가 있으면 ls스크립트는 부모이고 ls자식입니다.
추후 공지가있을 때까지 일시 중지되었습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.