2012-12-10 2 views
69

나는 리눅스에 조금 익숙하지 않다. 나는 일을 끝내기 위해 맹목적으로 명령을 실행한다. 나는 더 많은 새로운 사람들이 그것들에 대해 정기적 인 지식을 갖기 때문에 이러한 유형의 질문을하는 것은 낭비가되지 않을 것이라고 생각했다.'내보내기'명령의 기능은 무엇입니까?

저는 최근에 젠킨스와 함께 작업하기 시작했으며,이 내보내기 명령을 사용하여 젠킨스 전쟁 아카이브를 실행해야했습니다. 그래서 나는 의 'export' 명령이 일반적으로 무엇을하는지, 그리고 jenkins를 실행하는 동안 (jenkins home이 설정된 후)이 명령을 실행해야 하는지를 알아야했습니다.

감사합니다. sh 관련 껍질 (예 bash 등)에

+1

사용한 내보내기 명령에 대해 더 자세히 말하면 도움이됩니다. 더 많은 컨텍스트가 없으면 환경 변수를 설정하는 것입니다. http://en.wikipedia.org/wiki/Environment_variable#Unix –

+4

[bash : 내보내기 사용 여부에 관계없이 변수 정의하기]를 참조하십시오 (http://stackoverflow.com/questions/1158091/bash-defining-a- variable-with-without-export) – tripleee

+0

가능한 [unix export 명령] 복제본 (http://stackoverflow.com/questions/7328223/unix-export-command) –

답변

87

export 는 자식들을 상속되도록 는 아이 프로세스을 내보낼 환경 변수를 표시한다.

export is defined in POSIX

:

쉘은 그 이후에 실행되는 명령의 환경으로 야기한다 지정된 이름에 대응하는 변수로 내보내기 특성을 제공한다. 변수의 이름 다음에 = word가 오는 경우 해당 변수의 값은 word로 설정됩니다.

+0

고마워요! 귀하의 모든 답변은 정말 도움이되었으며, 몇 가지 더 배우는 방법을 안내합니다! :-) –

+0

이런 의미에서 하위 프로세스는 무엇입니까? –

+6

모르겠다 –

2

간단히 말해서 새 셸 세션을 열면 환경 변수가 설정됩니다. 언제든지 변수 값을 변경하면 쉘은 그 변수를 선택할 방법이 없습니다. 이는 여러분이 변경 한 사항이 새로운 쉘 세션에서 효과가 있음을 의미합니다. export 명령은 내 보낸 변수에 대한 변경 사항에 대해 현재 쉘 세션을 업데이트하는 기능을 제공합니다. 변경 한 변수의 값을 사용하기 위해 새 쉘 세션까지 기다릴 필요가 없습니다.

+1

하지만 'a = 5'라고 말하면'echo $ a'라고 쓰면 5라고 표시됩니다. 그러나 "언제든지 변수 값을 변경하면 셸에서 변경 내용을 선택할 수 없으므로 변경 한 내용이 새 셸 세션에서 적용됩니다."라고 썼습니다. <- 그럼 어떻게 export하지 않고 쉘 세션을 업데이트 했습니까? 수출이 필요한 경우를 예로들 수 있습니까? – barlop

+0

쉘 세션 중에 설정하는 변수는 쉘 변수입니다. 로컬이며 현재 쉘 세션에 액세스 할 수 있습니다. 언제든지 원하는 값으로 변경할 수 있으며 변경 사항을 내보낼 필요없이 현재 쉘 프로세스에서 현재 값을 사용할 수 있습니다.반면에 환경 변수는 로그인시 설정됩니다. 값을 변경하면 현재의 쉘 프로세스와 새로운 하위 프로세스 모두에서 새 값을 사용할 수 있도록 새로 고치는 것이 무엇인지 간단하게 수행해야합니다. 정확히 무슨 수출 않습니다. – katwekibs

18

Windows 배경에서 오는 것 같습니다. 그래서 나는 그것들 (나는 리눅스에 익숙하지 않은 것)을 대조 할 것이다. 내 의견에 대한 사용자의 답장을 발견하여 유용성을 파악하는 데 유용했습니다.

Windows에서 변수는 영구적 일 수 있습니다. 환경 변수라는 용어는 cmd 명령을 사용하여 cmd 셸에서 변수를 설정할 때뿐만 아니라 변수가 Windows GUI에서 설정되어 레지스트리에서 설정되고 새 cmd 창에서 볼 수있게되는 경우를 포함합니다. 예 : "환경 변수를 표시, 설정 또는 제거하며 매개 변수없이 사용하면 set은 현재 환경 설정을 표시합니다." Linux에서 set은 환경 변수를 표시하지 않으며, 호출하지 않는 쉘 변수/환경 변수를 나타냅니다. 또한 리눅스는 변수를 설정하는 데 사용하지 않습니다. (위치 매개 변수와 쉘 옵션은 제외하고 마지막에 메모로 설명합니다.) 단지 쉘 변수를 표시하기 위해서만 사용합니다. Windows는 예를 들어 설정 및 표시를 위해 세트를 사용합니다. 5로 설정하면 리눅스는 그렇지 않습니다.

리눅스에서는 부트 업시 변수를 설정하는 스크립트를 만들 수 있다고 생각합니다. /etc/profile 또는 /etc/.bashrc이지만 그렇지 않은 경우 영구적이지 않습니다. RAM에 저장됩니다.

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

set 명령으로 쉘 변수를 볼 수 있습니다 (단, 윈도우와 달리 set 명령을 사용하여 변수가 설정되지 않습니다).

set -o posix; set (set -o posix를 한 번 실행하면 너무 많은 불필요한 정보가 표시되지 않습니다.) 따라서 set은 쉘 변수를 표시합니다.

당신은

쉘 변수, 예를 들어 설정하는 env 명령을 사용하여 환경 변수를 볼 수 있습니다 단지 a=5

환경 변수가 수출로 설정, 수출은 여기

당신이 쉘 변수 ZZZ는 설정을 참조 쉘 변수를 설정 ZZZ = 5, 볼 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 

$ 

다른 유용한 스레드

https://unix.stackexchange.com/questions/176001/how-can-i-list-all-shell-variables

https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference

조금 부연하고 다소 수정 하나 점 참고 -를 보여줍니다 무엇을보고 난 'set'은 "위치 매개 변수"와 "쉘 옵션/속성"을 설정하는 데 사용할 수 있으며, 기술적으로는 둘 다 변수이지만 man 페이지는 그렇지 않을 수도 있습니다. 그것들을 그처럼 묘사하십시오. 하지만 여전히 언급했듯이 set은 쉘 변수 나 환경 변수를 설정하지 않습니다. set asdf을하면 $ 1을 asdf로 설정하고 echo $1을하면 asdf가 표시됩니다. set a=5을 수행하면 변수 a를 5로 설정하지 않습니다. 위치 매개 변수 $ 1을 "a = 5"문자열과 동일하게 설정합니다. 따라서 리눅스에서 a = 5를 설정했다면 아마 누군가 실수로 그 문자열을 $ 1에 넣기를 원하지 않는 한 실수 일 것입니다. 리눅스가 설정할 수있는 또 다른 것은 쉘 옵션/속성입니다. -o를 설정하면 해당 목록이 표시됩니다. 예를 들어, set -o verbose을 해제하면 자세한 정보 표시가 켜지 며 (기본 설정은 꺼져 있지만이 설정에는 차이가 없습니다). 또는 set +o verbose을 사용하여 자세한 정보를 표시하지 않을 수 있습니다. Windows에는 set 명령에 대한 사용법이 없습니다.

+0

는 껍데기와 환경을 보여 주며 환경은 'env'만이 환경을 보여줍니다. – barlop

+1

처음에는 혼란 스러울 수있는 승리 사례를 다루기 때문에이 답변과 비슷합니다. – N0thing

관련 문제