[shell] ‘내보내기’명령의 기능은 무엇입니까?

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

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

감사!



답변

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

exportPOSIX에 정의되어 있습니다 .

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


답변

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

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 명령에 대해 그러한 사용법이 없습니다.


답변

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


답변