export PATH = something : $ PATH은 무슨 뜻입니까?


27

저는 Linux를 처음 접했고 파일 끝에 .profile홈 폴더 아래에 다음 명령을 넣었습니다 .

export PATH="~/.composer/vendor/bin:$PATH"

Windows에서 환경 변수 및 해당 값의 문제를 조금 알고 있지만이 경우이 명령의 기능과 구성되는 부분을 이해하고 싶습니다.

  1. 시작할 때이 "내보내기"문구는 무엇입니까? Bash에 사용 가능한 데이터를 내보내고 있습니까?

  2. 첫 번째 PATH와 두 번째는 무엇 $PATH이며 왜 두 개가 필요한가?


OS들 사이의 약간의 기술적 차이는 Windows에서이 프로세스와 동일합니다 : windowsitpro.com/systems-management/…
2 비트 연금술사

1
"내보내기"는 bash가 시작한 새로운 프로그램에 변경 사항을 표시합니다.
Thorbjørn Ravn Andersen

1
@ ThorbjørnRavnAndersen : 아니요, 변수가 이미 내 보낸 것으로 표시되어 export있기 때문에 명령 사용 여부에 관계없이 발생합니다 PATH. (나를 믿지 않으면 두 가지 방법으로 시도하십시오!)
David

답변:


39

시작할 때이 "내보내기"문구는 무엇입니까?

export는 명령입니다 (보다 정확하게는 Bash builtin , 즉 실행 가능한 파일이 아니며 PATHBash 자체에 내장 된 명령입니다).

Bash에 사용 가능한 데이터를 내보내고 있습니까?

export과제의 왼쪽에있는 환경 변수를 과제의 오른쪽에있는 값으로 설정합니다. 이러한 환경 변수는 변수를 설정하는 프로세스와 동일한 환경에서 생성 된 모든 하위 프로세스, 예를 들어 ~/.profile동일한 환경에서 생성 된 모든 하위 프로세스 (예 : 다른 쉘을 포함 할 수 있는 Bash 인스턴스)에 표시됩니다. 액세스 할 수 있습니다).

첫 번째 PATH와 두 번째는 무엇 $PATH이며 왜 두 개가 필요한가?

PATH위에서 설명한 첫 번째 는를 사용하여 설정할 환경 변수 export입니다.

이후 PATH때 일반적으로 뭔가를 포함 ~/.profile(포함 된 기본적으로 공급된다 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games), 간단하게 설정 PATH~/.composer/vendor/bin할 것 PATH만을 포함 ~/.composer/vendor/bin.

그래서 보낸 명령의 변수에 대한 참조로 대체 (또는이 "확장") 명령의 평가시 배시에 의한 변수의 값을 , :$PATH할당되는 값의 끝에서 투입 PATH되도록 PATH함유 끝 ~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games( 즉 , 시작시 PATH이미 플러스 ~/.composer/vendor/bin:를 포함하는 것).


대단한 설명.
Choylton B. Higginbottom

16

https://help.ubuntu.com/community/EnvironmentVariables 가 도움이 될 것입니다. 또한 man bash그것이 어떻게 작동하는지 이해하는 데 매우 도움이 될 수 있습니다 (적어도 Bash에서)

어쨌든- PATH=기본적으로 PATH변수를 설정하고 검색 할 새로운 경로를 추가하고 이미 / 이전에 설정된 경로를 추가합니다 $PATH(기본적으로 PATH변수에 대한 참조 ).

따라서 PATH지금까지 다음과 같이 설정 되었다고 가정 해보십시오 .

PATH="x:y:z"

그리고 당신은 설정

PATH="a:b:c:$PATH"

당신 PATH처럼 될 것입니다 후 :

a:b:c:x:y:z

나는 그것이 의미가 있기를 바랍니다.

그리고 그 위에 새 변수를 내 보내서 자식 프로세스 / 하위 셸을 포함하여 환경에서 알 수 있도록합니다.

설정된 디렉토리의 순서 PATH가 중요 할 수도 있습니다. 그리고 다음과 같은 PATH="$PATH:a:b:c"결과가 나타납니다.

x:y:z:a:b:c

명령을 검색하는 동안 디렉토리 / 경로의 순서에 영향을 미칩니다 (두 개 이상의 디렉토리에 명령이있는 경우 처음 찾은 것이 사용됩니다-때로는 예기치 않은 결과가 발생할 수 있습니다).


2

다음은 총알 점을 통과 할 때 모두가 따라갈 수있는 명령입니다. export PATH="~/.composer/vendor/bin:$PATH"

  • export쉘 내장 (쉘이 없다는 것을 의미 /bin/export) 명령은 기본적으로 환경 변수를 호출 된 다른 프로그램 bash(추가 읽기의 링크 된 질문 참조)과 서브 쉘 에서 사용할 수있게합니다 .
  • 쉘에서 할당이 먼저 확장 된 다음 할당이 두 번째로 수행됩니다. 따라서 큰 따옴표 안에있는 것이 먼저 확장되어 PATH나중에 변수에 저장됩니다 .
  • $PATH기본 PATH할당 (또는이 명령이 .bashrc또는에 표시 될 때까지 변수가 어떻게 보이는지 .profile)이며 확장합니다.
  • ~/.composer/vendor/bin으로 확장됩니다 /home/username/.composer/vendor/bin. 여기 .composer에서 선행 점으로 인해 숨겨진 폴더가 있습니다.
  • 이 짧은 부분 ~/.composer/vendor/bin:$PATH은 이제로 구분 된 긴 폴더 목록으로 변환되었습니다 :. 경로에 공백이있는 폴더를 포함 할 수 있도록 모든 것을 큰 따옴표로 묶습니다.
  • 마지막으로 모든 것이 PATH변수 및 외부 명령에 저장되어 사용할 수 있습니다.

간단한 예

내 대화 형 쉘은 실제로 mksh도 가지고 일어나는, export내장을. exportset 을 사용 하면 VAR변수를 내 보낸 일련의 명령 / 하위 프로세스로 변수를 전달하고 사용할 수 있습니다.

$ echo $SHELL            
/bin/mksh
$ VAR="HelloAskUbuntu"
$ bash -c 'echo $VAR' 
$ export VAR="HelloAskUbuntu"                                                  
$ bash -c 'echo $VAR'                                                          
HelloAskUbuntu
$ 

추가 독서


3
아니요, ~in ~/.composer/vendor/bin은 확장되지 않습니다! 물결표는 =사인 바로 다음과 같은 몇 가지 특별한 장소에서만 확장됩니다 . PATH="~/.foo:$PATH"결과 ~/.foo:/other/path/dirs.... 그러나 ~에서 확장되어 PATH=~"/.foo:$PATH"결과는 /home/user/.foo:/other/path/dirs...입니다.
Volker Siegel

2

나는 여기와 웹의 다른 곳에서 이것을 읽고 친구와 이야기하고 신입생 (어쩌면 우분투 신입생보다 더 많은 사람들이 생각할 수도 있음) 으로이 명령을 매핑해야한다고 결정했습니다.지도를 만들어야합니다. 따라서 그것이 무엇인지와 어디에 있는지 배우십시오.

예비 데이터

지금까지이 장의 내용을 이해하지 못했다면 걱정하지 않아도됩니다. 계속 읽을수록 명확 해지지 만이 문제를 이해하려면 환경 변수 (EV), 해당 값 및 목적을 읽어야합니다. . 이제 저와 같은 새로운 이민자를위한 간단한 단어와 매핑 방법으로 명령을 설명하려고합니다. 최선을 다하려고 노력했습니다 ...

매핑

export PATH="~/.composer/vendor/bin:$PATH"

Ubuntu 15.10과 함께 제공되는 EV "PATH"의 원래 값은 다음과 같습니다.

/usr/bin:/usr/sbin

명령 자체에는 두 개의 PATH 문구가 있습니다. 마지막은 $ PATH입니다-$는 "옆에 EV의 원래 값을 인쇄합니다"라고 말합니다. 옆에있는 EV는 PATH EV입니다.

우리는 수출 경로 변수 자체를 (물론 서브 프로세스가 제공, IE와 같은 그 안에 실제로 배쉬 쉘을하지 않은 CLI에서 실행하지만, 실행 (처리 Drush 는 IS, 드루팔 ) CLI를.

내보내기 외에도 우리는 그것을 확장했습니다 : 첫 번째 PATH 문구 (PATH =)는 원래 값 ($ PATH로 표시)에 추가 값 (~ / .composer / vendor / bin :)을 추가하는 데 사용되었습니다.

  • 위 단락에서 언급 한 새 값의 끝에있는 콜론 (:)은 새 값을 원래 값과 구별하는 데 사용됩니다.

  • ""는 값이있는 영역입니다.

  • ~는 홈 폴더입니다.


나는이 매핑 후에 나처럼 신입생에게 명령이 명확 해지기를 바랍니다.


1

export명령은 변수를 서브 쉘에서 사용할 수있게합니다. 즉, 변수 PATH가 없으면 하위 쉘에서 변수 가 표시되지 않습니다.

PATH 두 번 언급됩니다 :

  • 변수로서 값이 =부호의 왼쪽에 할당됩니다 .
  • 변수 이름은 =부호 오른쪽의 값으로 대체됩니다 . 이전 값이 새 값의 일부가됩니다.

1
"그것이 없으면 변수 PATH는 서브 쉘에서 보이지 않을 것입니다." 이것은 올바르지 않습니다. PATH환경 변수 (A와 아주 똑같은하지 않은 자동으로 수출되고, 그래서 변수) export명령은 필요하지 않습니다.
David

Bourne 쉘 제품군은 실제로 쉘과 환경 변수를 구별하지 않습니다. ( sc.tamu.edu/help/general/unix/vars.html ) 내 시스템 (Arch Linux)에서 bash는 setenv명령을 알지 못합니다 .
rexkogitans 2016 년

1
커널이 알고있는 환경 변수와 bash 내부의 셸 변수에는 여전히 차이가 있습니다. 이후 PATH실행할 필요가 없습니다 환경에서 유래, 그것은 자동으로 내보낼 export변경 (당신이 링크 된 페이지의 말씀에 반대) 자식 프로세스에 전달 될 수 있도록.
David

환경 변수는 커널의 속성이 아니라 프로세스의 속성입니다. 우리가 여기서 말하는 프로세스는 sh, bash (우분투는 zsh를 사용합니까?)이므로 쉘 변수와 동일하게 남겨 둘 수 있다고 생각합니다. 그러나 환경 변수와 마찬가지로 쉘 변수는 임의의 프로그램으로 전달되지 않습니다.
rexkogitans

이 시점에서 우리는 시맨틱 스에 빠져들고 있다고 생각합니다. 모든 내가 말하려고했던 것은 bash는 그 것이었다, PATH=foo그리고 export PATH=foo동일한 동작을.
David

0
export PATH="~/.composer/vendor/bin:$PATH"
  1. exportbash의 내장 명령으로 환경 변수가 될 내보내기 변수를 의미합니다. ( help export더 많이 기댈 수 있습니다

    (캐릭터는 명령에 따라 매개 변수가 공간으로 나뉘어져 있으므로이 경우 매개 변수가 하나만 있습니다)

  2. PATH대문자로 지명 될 변수 이름, bash는 통상, 미리 정의 된 varibale이다.

  3. =이 변수에 할당 한 값을 의미한다.

  4. 모든 문자열은 varibale의 가치입니다

  5. $PATH, 이름 배쉬의 funciton의 종류 variable expantion, 배쉬는 존재의 가치 대체합니다 PATHBEFORE에 문자열을 전송, 매개 변수 문자열을 export명령

  6. :이 변수를 사용하고자하는 모든 응용 프로그램에서 PATH 변수와 understooded에서 spcial 문자입니다. 그것은 seperator를 의미합니다. 그래서 그들은 PATH 변수에 많은 디렉토리를 가질 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.