요세미티의 명령 행에서 직접 PATH 내보내기-PATH는 어디에 있습니까?


3

Homebrew를 통해 설치 한 최신 버전의 git을 사용하고 싶기 때문에 PATHOS X에서 OS X 및 명령 줄 도구와 함께 제공되는 오래된 버전 대신 Homebrew 버전을 사용하도록 변수를 변경해야했습니다 . 이 튜토리얼 에서는 다음을 간단히 실행하는 것이 좋습니다.

$ export PATH=/usr/local/bin:$PATH

그것이 내가 한 일이며 훌륭하게 작동했습니다.

내 질문은 :이 명령은 PATH변수를 어디에서 수정 했습니까? 나는이없는 ~/.bashrc, ~/.bash_profile또는 ~/.profile전혀 내 홈 디렉토리에있는 파일,하지만 난 때 $ echo $PATH다음은 PATH올바른 표시 및 실행할 때 which gitgit --version모든 것이 올바른 위치를 가리 키도록 나타납니다. 올바른 경로가 나열되어 /etc/paths있지만 export명령 줄에서 테스트 경로를 추가하면 해당 파일에 테스트 경로가 나타나지 않습니다.

또 다른 질문 : 이것이 내 PATH변수 를 수정하는 좋은 방법 입니까?

마지막 질문 :이 방법의 장점과 단점은 무엇입니까?

편집 : 올바른 경로가 나열되어 /etc/paths있지만 사용하여 테스트 경로를 추가 $ export PATH=/test:$PATH하면 테스트 경로가에 나타나지 /etc/paths/않지만 실행할 때 처음 표시되지만 $ echo $PATH재부팅 후 손실됩니다.


이것은 많은 것의 복제본입니다 (여기에 몇 가지 질문이 있습니다). / usr / local / bin은 / etc / paths에 설정된 기본 경로에 있습니다
Mark

1
@Mark 나는 나의 주요 질문이 그 주제에서 본 다른 질문들보다 더 구체적이라고 생각합니다. 나는 그것이 어디에서 대답되는지에 대한 질문을 아직 보지 못했습니다. 따라서 복제본이라고 말하는 것은 본질적으로 "어딘가에 귀하의 질문에 답변 한 사람"이라고 말하지만 답변이 광범위한 질문과 답변 내에있는 곳은 생략하는 것입니다. 올바른 방향으로 나를 가리켜 주시면 가장 도움이 될 것입니다. 그것이 실제로 다른 곳에서 대답되면 나는 행복하게 내 질문을 제거 할 것입니다. 감사합니다.
cfx 2016 년

죄송합니다. 알맞은 복제본을 찾을 수있을 때까지 주석의 두 번째 비트를 답으로 보내주십시오. 그러나 apple.stackexchange.com/a/121021/237 을 참조하십시오. 통로. 또한 정식 답변을 설정해야하므로 해당 답변에 설명되어 있지 않은 내용에 대해 의견을 말하십시오. 따라서 다음 사람이 모든 검색을 수행 할 필요는 없습니다.
Mark

/ etc / paths에 추가가 작동하지 않습니다-작동하는 별도의 질문이어야한다고 생각합니다. 따라서 사용자가 수행 한 작업을 정확히 시도해야합니다 (요구 한 재부팅이 필요한 경우 포함)
Mark

명확하게 해주셔서 감사합니다. 해당 스택을 참조하고 테스트를 더 수행하고 발견 한 내용에 따라이 스택을 업데이트합니다.
cfx

답변:


3

6 월 3 일에 다음 코멘트를 게시했습니다.

@DavidAnderson 따라서 올바르게 이해하면 대화 형 셸 세션에서 export PATH ...를 실행하면 해당 세션의 $ PATH에만 영향을 미치고 새로 추가 된 경로는 어디에도 저장되지 않으므로 새로 추가 된 경로를 편집 할 수있는 파일이 없습니다 ). 예를 들어 export PATH = / test : $ PATH를 실행하지만 대신 / testing_123 디렉토리를 내보내려는 경우 가장 좋은 방법은 잘못된 / test 디렉토리가 포함 된 파일을 찾아서 편집하지 않고 새 세션을 시작하는 것입니다. (그러한 파일이 없기 때문에). 옳은?

귀하의 의견에 대한 나의 답변

bash 매뉴얼 페이지에서 다음을 추출했습니다.

A parameter is an entity that stores values.  It can be a name, a
number, or one of the special characters listed below under Special
Parameters.  A variable is a parameter denoted by a name.  A variable 
has a value and zero or more attributes.

PATH변수의 이름입니다. 일반적으로이 변수에는 내보내기 속성 만 설정되어 있습니다. export 속성은 환경을 통해 후속 명령으로 내보낼 변수를 표시합니다. 이 export명령은 내보내기 속성을 설정하지만 PATH변수 의 경우 내보내기 속성이 이미 설정되어 있습니다. 따라서 PATH변수의 경우 다음 네 명령이 동일합니다.

PATH=/test:$PATH
export PATH=/test:$PATH
declare PATH=/test:$PATH
typeset PATH=/test:$PATH

귀하의 의견은 정확합니다. 그러한 파일이 없습니다.

언급 한 유형이 실수 인 경우 새 세션을 시작하는 것이 가장 좋은 방법이라고 생각하지 않습니다. 나는 명령을 입력합니다

declare -p PATH

그런 다음 출력을 강조 표시하십시오. 그런 다음 다음 명령으로 텍스트를 잘라 붙여 넣을 수 있습니다. 리턴 키를 누르기 전에 다른 키를 사용하여 실수를 정정하십시오.

이 주제에 대한 자세한 내용은 bash 매뉴얼 페이지를 참조하십시오. 명령을 입력하십시오

man bash

또는 bash-GNU Bourne-Again SHell 사이트를 방문하십시오 .

편집에 대한 응답으로 :

예, 재부팅 할 때 PATH 변수에서 / test가 손실된다고 가정합니다. 이것이 파일에 export명령 을 넣어야하는 이유 ~./profile입니다.

원래 답변 :

때 혼란 것 ~/.bashrc, ~/.bash_profile그리고 ~/.profile파일을 실행합니다. 아마도 이것이 도움이 될 것입니다.

컴퓨터를 설정하는 방법은 다음과 같습니다. 나는 세 개의 파일이 있습니다 ~/.profile, ~/.bashrc하고 ~/.bashcm. 이 중 하나라도 누락 된 경우 만들 수 있습니다.

터미널 응용 프로그램을 시작하거나 메뉴 표시 줄의 "쉘"에서 "새 창"을 선택하면 대화식 bash 로그인 쉘이 호출됩니다. 이 쉘은 ~/.profile시작할 때 스크립트를 실행합니다 . 당신은 대체 할 수 있습니다 ~/.bash_profile또는 ~/.bash_login위해 ~./profile원하는 경우. 로그인 쉘이 아닌 대화식 bash 쉘이 시작되면 쉘은에서 명령을 읽고 실행합니다 ~/.bashrc. 의 목적은 ~/.bashcm모두 실행하는 일반적인 스크립트를 제공하는 것입니다 ~/.profile~/.bashrc.

다음은 .profile파일 의 예입니다

echo in .profile
source ~/.bashcm
export PATH=$PATH:~/bin
echo exit .profile

echo 명령의 목적은 스크립트가 실행될 때를 설명하는 것입니다. 편한 후에는 주석을 달거나 삭제할 수 있습니다. .profile파일은 실행 .bashcm스크립트가 다음 PATH 변수와 출구를 수정합니다. 예제 .bashcm파일은 아래와 같습니다.

echo in bashcm
PS1='\h:\W \u\$ '
alias home='cd ~'
echo exit .bashcm

echo 명령 이외의 .bashcm경우 프롬프트와 별명 만 설정합니다. .bashrc아래에 표시된 예제 파일은 단순히 .bashcm스크립트 를 실행합니다 . 다시 echo 명령은 설명을위한 것입니다.

echo in .bashrc
source ~/.bashcm
echo exit .bashrc

터미널 응용 프로그램을 시작하고 명령을 입력하면

echo $PATH
alias
bash
echo $PATH
alias

in the window, I get the following.

Last login: Wed May 27 14:48:19 on ttys000
in .profile
in bashcm
exit .bashcm
exit .profile
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ bash
in .bashrc
in bashcm
exit .bashcm
exit .bashrc
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ 

export실제로 PATH셸 내에서 실행되는 프로세스에 표시 되는지 확인하십시오 . 이 없으면 export변수는 하위 프로세스가 아닌 현재 (쉘) 프로세스에서만 볼 수 있습니다.
nohillside

1
@DavidAnderson 따라서 올바르게 이해 export PATH...하면 대화 형 셸 세션에서 실행 하면 해당 세션에만 영향 $PATH을 미치며 새로 추가 된 경로는 어디에도 저장되지 않으므로 새로 추가 된 경로를 편집 할 수있는 파일이 없습니다. 예를 들어, 실행 export PATH=/test:$PATH하지만 /testing_123디렉토리 를 내보내려는 경우 가장 좋은 방법은 잘못된 /test디렉토리가 포함 된 파일을 찾아서 편집하는 대신 새 세션을 시작하는 것입니다 (그러한 파일이 없기 때문에). 옳은?
cfx

@patrix : 추가 연구 결과 변수 의 사용 export은 선택적입니다 PATH. 예를 PATH=$PATH:~/bin들어와 같습니다 export PATH=$PATH:~/bin. 두 명령을 다르게 작동 시키려면 먼저 declare +x PATH명령 을 입력해야합니다 . 내보내기 속성이 해제됩니다.
David Anderson

1
@cfx : 최신 의견에 대한 답변으로 답변을 업데이트했습니다.
David Anderson

export변수의 경우 한 번으로 충분합니다 .PATH /etc/profile의 출력 /usr/libexec/path_helper -s이 평가 될 때 이미 발생합니다 .
nohillside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.