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.