'내보내기'명령의 기능은 무엇입니까?


85

나는 리눅스를 처음 접했고 일을 끝내기 위해 맹목적으로 명령을 실행합니다. 나는 더 많은 새로운 사람들이 그것에 대해 정기적으로 지식을 갖게 될 것이기 때문에 이러한 유형의 질문을하는 것이 낭비가 아닐 것이라고 생각했습니다.

저는 최근에 Jenkins 로 작업하기 시작 했고이export 명령을 사용 하여 Jenkins 전쟁 아카이브 를 실행해야했습니다 . 따라서 export일반적으로 어떤 명령이 수행되는지, Jenkins를 실행하는 동안 (Jenkins 홈이 설정된 후)이 명령을 실행해야하는 이유를 알아야했습니다.

감사!


1
사용한 내보내기 명령에 대해 더 많이 말하면 도움이 될 것입니다. 더 많은 컨텍스트가 없으면 환경 변수를 설정하고 있다고 생각합니다. 참조 en.wikipedia.org/wiki/Environment_variable#Unix
여호수아 D. 보이드


답변:


99

exportin sh및 관련 셸 (예 :) 은 자식 프로세스 bash내보낼 환경 변수를 표시 하여 자식이 상속하도록합니다.

exportPOSIX에 정의되어 있습니다 .

쉘은 지정된 이름에 해당하는 변수에 내보내기 속성을 제공해야하며, 이로 인해 이후에 실행되는 명령의 환경에있게됩니다. 변수 이름 뒤에 = 단어가 오면 해당 변수의 값은 단어로 설정됩니다.


감사합니다! 귀하의 모든 답변은 정말 도움이되었으며 몇 가지 더 배우도록 안내합니다! :-)
Chathura Kulasinghe

1
이런 의미에서 자식 프로세스는 무엇입니까?
AsyncMoksha

13
이해가 안
Martin Hansen

@MartinHansen 무엇을 이해하지 못합니까? 또한 내 대답을 참조하십시오.
barlop

링크의 끝에 추가 대괄호가있다는 : 하나의 심볼 편집 때문에, 나는 그것을 편집 할 수 없습니다
라도슬라프 스토야노프

27

나는 당신이 창문 배경에서 오는 것 같아요. 그래서 나는 그것들을 대조 할 것입니다 (저도 리눅스에 익숙하지 않습니다). 내 의견에 대한 사용자의 답변이 문제를 파악하는 데 유용하다는 것을 알았습니다.

Windows에서 변수는 영구적 일 수도 있고 아닐 수도 있습니다. 환경 변수라는 용어에는 SET 명령을 사용하여 cmd 셸에 설정된 변수와 변수가 Windows GUI 내에서 설정되어 레지스트리에 설정되고 새 cmd 창에서 볼 수있는 경우가 포함됩니다. 예 : Windows https://technet.microsoft.com/en-us/library/bb490998.aspx 의 set 명령에 대한 문서 "환경 변수를 표시, 설정 또는 제거합니다. 매개 변수없이 사용하면 set은 현재 환경 설정을 표시합니다." Linux에서 set는 환경 변수를 표시하지 않고 환경 변수로 호출 / 참조하지 않는 쉘 변수를 표시합니다. 또한 Linux는 변수를 설정하기 위해 set을 사용하지 않고 (위치 매개 변수와 쉘 옵션을 제외하고, 마지막에 참고로 설명합니다), 단지 그것들을 표시하고 심지어 쉘 변수를 표시하기 위해서만 사용합니다. Windows는 설정 및 표시를 위해 set을 사용합니다. 예를 들어 set a = 5, Linux는 그렇지 않습니다.

리눅스에서, 나는 당신이 부팅 예에 세트 변수하는 스크립트를 만들 수있는 생각 /etc/profile이나 /etc/.bashrc하지만 그렇지 않으면, 그들은 영원한 아니에요을. RAM에 저장됩니다.

Linux에서는 쉘 변수와 환경 변수 사이에 차이가 있습니다. Linux에서 셸 변수는 현재 셸에만 있고 환경 변수는 해당 셸과 모든 하위 셸에 있습니다.

set명령을 사용하여 셸 변수를 볼 수 있습니다 (Windows와 달리 Linux에서 변수는 set 명령으로 설정되지 않음).

set -o posix; set (처음에 -o posix를 한 번 설정하면 불필요한 항목이 너무 많이 표시되지 않습니다). 따라서 set쉘 변수를 표시합니다.

env명령을 사용하여 환경 변수를 볼 수 있습니다.

쉘 변수는 예를 들어 a = 5

환경 변수는 내보내기로 설정되고 내보내기는 셸 변수도 설정합니다.

여기에서 zzz = 5로 설정된 쉘 변수 zzz를 볼 수 있으며 실행할 때 set표시되지만 환경 변수로 표시되지 않습니다.

여기서 우리는 내보내기로 설정된 yyy를 볼 수 있으므로 환경 변수입니다. 그리고 쉘 변수와 환경 변수 아래에 표시됩니다.

$ zzz=5

$ set | grep zzz
zzz=5

$ env | grep zzz

$ export yyy=5

$ set | grep yyy
yyy=5

$ env | grep yyy
yyy=5

$

다른 유용한 스레드

/unix/176001/how-can-i-list-all-shell-variables

/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference

참고-내가 작성한 내용을 약간 정교하게 수정하고 수정하는 한 가지 요점은 Linux bash에서 'set'을 사용하여 "위치 매개 변수"및 "셸 옵션 / 속성"을 설정하는 데 사용할 수 있으며 기술적으로는 둘 다 매뉴얼 페이지에서 설명하지 않을 수도 있지만 변수입니다. 그러나 언급했듯이 set는 쉘 변수 또는 환경 변수를 설정하지 않습니다.) 그렇게하면 set asdf$ 1을 asdf로 설정하고, 그렇게 echo $1하면 asdf가 표시됩니다. 만약 당신이set a=5변수 a를 5로 설정하지 않습니다. 위치 매개 변수 $ 1을 "a = 5"문자열과 동일하게 설정합니다. 따라서 리눅스에서 a = 5 세트를 본 적이 있다면 누군가가 실제로 $ 1의 a = 5 문자열을 원하지 않는 한 실수 일 것입니다. 리눅스가 설정할 수있는 또 다른 것은 쉘 옵션 / 속성입니다. -o를 설정하면 목록이 표시됩니다. 그리고 예를 들어 set -o verbose, off, verbose를 켜 려면 할 수 있습니다 (btw 기본값은 꺼져 있지만 이것은 차이가 없습니다). 또는 set +o verboseverbose를 끌 수 있습니다 . Windows는 set 명령에 대해 그러한 사용법이 없습니다.


set은 쉘과 환경을 보여주고 'env'는 환경 만 보여줍니다
barlop

1
처음에는 혼란 스러울 수있는 nix 대 win 케이스를 다루기 때문에이 답변을 많이 좋아합니다.
N0thing

6

간단히 말해서 환경 변수는 새 셸 세션을 열 때 설정됩니다. 언제든지 변수 값을 변경하면 쉘은 해당 변경 사항을 선택할 방법이 없습니다. 즉, 변경 한 내용이 새 셸 세션에 적용됩니다. 반면 export에이 명령은 내 보낸 변수의 변경 사항에 대해 현재 셸 세션을 업데이트하는 기능을 제공합니다. 변경 한 변수의 값을 사용하기 위해 새 셸 세션까지 기다릴 필요가 없습니다.


1
그러나 내가 말한다면 a=5다음 echo $a다음 5. 말한다 그러나 당신이 쓴 "당신은 변수의 값을 변경하면 언제든지, 쉘은 그 변화를 따기 방법이 없습니다. 변경하면 새로운 쉘 세션에 효력이 발생했다 수단 것을." . <-그래서 수출하지 않고 쉘 세션을 어떻게 업데이트 했습니까? 수출이 필요한 예를들 수 있습니까?
barlop

쉘 세션 중에 설정 한 변수는 쉘 변수입니다. 로컬이며 현재 쉘 세션에 액세스 할 수 있습니다. 언제든지 변경할 수 있으며 변경 사항을 내보낼 필요없이 현재 셸 프로세스에서 현재 값을 사용할 수 있습니다. 반면에 환경 변수는 로그인시 설정됩니다. 값을 변경하면 현재 쉘 프로세스와 새 하위 프로세스 모두에 새 값을 사용할 수 있도록 새로 고침을 수행해야합니다. 그것이 바로 수출이하는 일입니다.
katwekibs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.