Hombrew가 설치 한 도구를 찾을 수 있도록 Mac에서 PATH 변수를 어떻게 설정해야합니까?


86

새 Mac에서 Homebrew 를 설정하려고합니다 (이전 Mac에서는 소스에서 패키지를 설치합니다).

내가 설치하려고 한 첫 번째 패키지는 Git이었습니다.

$ brew install git

설치는 잘되었지만 which git여전히 라이온/usr/bin/git 과 함께 제공된 것을 보여줍니다 (제 생각에요?). 그리고 그중 하나는 설치 되지 않았습니다 ./usr/local/bin/git

$ echo $PATH
/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@rails31/bin:/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/meltemi/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/michael/.rvm/bin:/usr/local/mysql/bin:/opt/subversion/bin:/Developer/Additions/checker/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

보시다시피 /usr/bin기본값은 이전 /usr/local/bin$PATH

그래서 혼란 스러워요! HomeBrew (그리고 제작자가 자랑하는 것) 의 요점은 $PATH변수 를 엉망으로 만들 필요가 없다는 것입니다 !?!

그래서 내가 뭘 잘못 했어?


당신은 이전에 당신의 길을 엉망으로 만들었고 어쩌면 그것들을 잘못된 순서로 놓았습니까? 또한 이것이 왜 "브 래킹 포인트"형태의 홈 브루인지는 잘 모르겠습니다. 경로의 개념을 좋아하지 않거나 수정하는 것은 특별한 권한이나 무언가로 시스템 전체에 10 개의 다른 plist를 작성하고 뿌려야하는 복잡한 것입니다. ..
prodigitalson

1
RVM과 관련이없는 경로는 표준 문제 여야합니다. 그리고 아닙니다. 나는 길을 바꿔야한다고 불평하지 않습니다. 그것은 그들이 If you choose /usr/local, everything 'just works!'"그냥 작동"하지 않기 때문에 내가 잃어버린 것을 궁금해해야한다는 주장을 반복하는 것처럼 보입니다 .
Meltemi

답변:


78

이 관련 게시물이 매우 유용하다는 것을 알았습니다. $PATH변수 를 변경하는 대신 /etc/paths파일을 편집하기 만하면 됩니다.

Homebrew는 PATH 수정을 원합니다. 실마리가 없다

최대한 빨리 방향을 따라 넣어 /usr/local/bin/usr/bin, 내 문제가 해결되었습니다.

  1. OS X에서 터미널을 엽니 다
  2. 다음 명령을 입력하십시오 : sudo vi /etc/paths
  3. 비밀번호를 요청하면 비밀번호를 입력하십시오.
  4. 경로 목록이 표시됩니다. 그래서 그들을 편집 /usr/local/bin경로가 이상 입력 /usr/bin경로
  5. * 저장하고 종료
  6. 터미널 재시작

내가 한 후에 내 모습은 다음과 같습니다.

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

* 콜론 ( :) 을 저장하고 종료하려면 을 입력하고 wq(동시에 작성하고 종료하려면 )을 입력 하십시오 Enter.

/etc/paths그래픽 텍스트 편집기에서 파일을 열어서 편집 할 수도 있습니다.

Stack Overflow에서 그의 답변에 대한 답 을 얻었 습니다.


vi와 같은 경우 (나 같은) d를 사용하여 줄을 자르고 p를 사용하여 명령 모드에있을 때 붙여 넣기
Gerard

10
나는 이것에주의를 기울일 것입니다-더 좋은 대답은 .profile / .bash_profile의 경로를 수정하고 거기에 내보내는 것입니다. / etc / paths를 변경하면 모든 시스템 프로세스에 영향을 줄 수 있습니다. .profile / .bash_profile에서 PATH를 변경하면 계정과 명령 셸을 통해 호출 된 명령 모두에 대한 환경 설정이 현지화됩니다 (개발의 경우 필자가 원하는 것입니다). 정말로 신중한 경우 아래 답변에서 @Aristotle Pagaltzis가 제안하는 것을 수행 할 수 있습니다.
rholmes

1
OSX 용으로 설계된 패키지 관리자의 간단한 설치가 기본적으로 실패한다는 심각한 문제가 있다고 생각할 때 어느 시점이 있습니까? 경로를 변경하는 것은 잠재적으로 "수정"과 BTW를 깨뜨리는 것입니다.이 제안 된 수정 사항을 우연히 발견 한 이유는 Brew가 경로를 업데이트하지 못하지만 "경로"가 이미 올바른 순서로되어 있기 때문입니다. 또 다른 막 다른 골목. 광기를 멈추고 근본 원인을 해결하십시오.
Rick O'Shea 2016 년

또한, 거기에 path_helper/etc/paths.d.
Simon Wright

29

이 답변은 더 이상 사용되지 않습니다. 선호되는 Homebrew PATH주문은 설명대로되었지만 더 이상 사실이 아닙니다. 그러나 접근 방식이 더 일반적으로 적용되므로 관심을 끌기 위해 남겨 두겠습니다.


해서는 안됩니다.

브루 의도적으로 유지 /usr/local/bin /usr/bin 최대의 호환성에 대한 경로. 이러한 디렉토리의 순서를 반대로 PATH편집으로하는 /etc/paths것을 의미 모든 어디서나 시스템에서 프로그램이, 상관없이이 시작된 방법, 명령의 브루 버전을 얻을 것입니다. 그러나 일부는 Apple의 버전을 구체적으로 기대하거나 최신 버전을 사용하지 못할 수도 있습니다.

이 원칙을 유지하면서 Homebrew가 설치 한 버전을 git어떻게 구할 수 있습니까? 말대로, 간접 계층으로 모든 문제를 해결할 수 있습니다 (간접 계층이 너무 많은 경우 제외). — 또는이 경우에는 두 개의 레이어가 있습니다.

특히, ~/bin나는 내가 시작할 때 넣은 디렉토리 를 갖는 것이 유닉스 습관의 일부였다 PATH. 이것은 내 첫 번째 비트 중 하나입니다 .bashrc.

[[ :$PATH: == *:$HOME/bin:* ]] || PATH=$HOME/bin:$PATH

이것은 PATH포함 여부를 확인 ~/bin하고 그렇지 않은 경우 앞에 추가합니다. 그런 다음 Homebrew 관리 형 git시스템 만 선택적으로 시스템 버전 ( 모든 Homebrew 관리 형 바이너리 대신)과 우선 순위를 설정하고 셸 세션 ( GUI 프로그램을 포함한 모든 프로그램이 아닌 )에서 선택합니다. 심볼릭 링크처럼 간단합니다.

ln -s /usr/local/bin/git ~/bin/git

직접 symlink 할 수 /usr/local/Cellar/git/1.8.2.1/bin/git 있지만, brew upgrade git직접 또는 간접적으로 수행 할 때마다 symlink를 수정해야합니다 . Homebrew의 고정 위치 심볼릭 링크에 심볼릭 링크를 사용하면 걱정할 필요가 없습니다.

따라서 디렉토리를 추가하여 디렉토리를 $HOME추가 할 수 PATH있으므로 심볼릭 링크에 심볼릭 링크 할 수 있으며 문제를 해결하고 Dr Seuss에 미소를 짓습니다. Yo dawg 나는 당신을 symlinks처럼 무리를 지었으므로 우리는 PATH당신을 symlink하는 동안 symlink 할 수 있도록 경로를 넣었습니다 .


1
훌륭합니다. 궁금한 점에 정확하게 답변합니다.
N_A

이 답변은 정답과 비슷하지만 정확한 명령을 실행할 수는 없습니다. 심볼릭 링크를 만들 때 "파일이 있습니다"라는 메시지가 계속 나타납니다.
Ryan

도움이 될만한 세부 정보가 충분하지 않습니다. 죄송합니다.
아리스토텔레스 Pagaltzis

1
@Ryan 명령에 args 순서가 올바른지 확인하십시오 ln. 첫 번째 경로는 대상이고 두 번째 경로는 symlink입니다.
Freedom_Ben

1
엘 캡에서 나는 쓸데없는 대답으로 실패하고 .zshrc에서 경로 순서를 편집하는 (ZSH 사용) 성공했습니다.export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Urs

17

당신은 아무 잘못도하지 않았지만, 만약 당신 이이 특정한 문제에 /usr/local/bin앞서 길 을 가졌다면 /usr/bin사라질 것입니다. 가장 쉬운 해결책은 바로 그렇게하고 뭔가를 넣는 것입니다.

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

당신의 ~/.bash_profile브루가 설치 그래서 모든 것을 처음으로 발견된다. 그것이 제가 Mac에 설정 한 방식입니다. 그러나 YMMV는 오랫동안 그렇게 해왔습니다.

그들이 함께 일하는 것이라고 믿는 것처럼 보인다 /usr/local/bin되고 후에 /usr/bin 내가 내 자신을 청소 만했을 수도있는 동안, 그래서 $PATH자신의 문서가 부족 어디 볼 수 있습니다 :

당신이 넣어해야합니다 /usr/local/bin/usr/bin 그들은 새로운 브루 버전을 얻을 경우 일부 프로그램은 예를 들어, 루비의 시스템 버전을 기대하기 때문에, 그리고 휴식.

에서 위키 및 양조 의사 # 10738 사이의 불일치 . 이 문서는 계속해서 "FAQ (위의 인용문)는 GUI 앱의 PATH 설정을 나타내며, 의사 ( PATH /usr/local/bin보다 우선하는 조언 /usr/bin)는 CLI 앱의 PATH 설정을 나타냅니다."


1
/usr/local/bin내 두 가지를 떠나지 $PATH않을까요? 나는 그렇게 믿는다. 대신 기본 경로의 순서 /etc/paths또는 내용을 편집 해야하는지 궁금합니다 /etc/paths.d. 그러나 이것은 모든 사용자에게 영향을 미칠 것입니다 ... 나쁜 것은 아닙니다. 어쨌든 다른 사람들이 어떻게 접근했는지보고 싶었습니다.
Meltemi

@Meltemi,이 답변의 정신은 올바른 : 당신의 갱신 PATH하도록 (사용자가 선택한 방식으로) /usr/local/bin선행을 /usr/bin. 여기에 제안 PATH.bash_profile대로 개인적으로 업데이트 합니다.

@ Nick- 흥미로운 정보는 ... 문제를 혼동시키는 역할을합니다 ... 적어도 문제는 ... Homebrew 문서는 터미널 명령이 경로를 /usr/local/bin따라 /usr/bin가 더라도 앱을 선택해야 함을 암시하는 것 같습니다 . 그러나 GUI 앱에는 특별한 코딩이 필요합니까? IT는 GUI이든 아니든 모든 앱이 $ PATH 변수를 조정해야 할 것으로 보입니다 . 그렇다면 내가 (또는 Homebrew 제작자) 무엇을 놓치고 있습니까?
Meltemi

그것이 애플에 의해 공급하여 브루가 필요하지 않은 라이온까지로 자식이 변화 - - 나는 브루 당신이 애플을 사용하려면 먼저 실행 파일을 제공 가정 생각 지금은 애플을 사용할 수 있습니다
user151019

이것에 마크에 동의합니다. MacPorts 및 Fink를 사용하면 기본 제공되는 Apple 제품과 완전히 다른 별도의 환경을 제공해야합니다. Homebrew는 Apple의 물건이 훌륭하고 그것을 사용하지 않는 자세를 취했습니다 (Apple이 할 때 다른 버전의 gcc를 다운로드하는 이유는 무엇입니까?).
Nick Klauer

6

나는 jthomas의 대답에 동의하지 않습니다. / etc / paths 파일을 편집하면 모든 프로그램의로드 경로가 변경됩니다. 시스템 응용 프로그램이 특정 버전의 바이너리를 찾을 것으로 예상하지만 경로 파일을 편집하여 다른 버전을 찾는 경우 위험 할 수 있습니다. 대신 ~ / .bashrc (또는 ~ / .bash_profile)에서 경로 변수를 변경하십시오. 그러면로드 경로는 터미널 내부에서만 변경됩니다.

# PATH
내보내기에 homebrew 앱 추가 PATH = / path / to / homebrew / app / bin : $ PATH

그런 다음 bash 또는을 다시로드 source ~/.bashrc하면 좋습니다. homebrew 경로는 다른 것보다 우선하므로 bash는 homebrew와 함께 다운로드 한 버전을로드합니다.


OS X에서는 .bashrc기본적으로로드되지 않습니다. 수동으로 제공합니까?
slhck

오 예. 나는 Ubuntu의 OS X에서 왔으며 .bashrc내 소스에서 소스 를 얻는 데 익숙 했습니다 .bash_profile. rc 파일을 생성하지 않으려면에 명령을 추가하면됩니다 .bash_profile.
Nathan

5

내가 이해하는 것처럼 Apple 분산 실행 파일과 충돌하는 이름 (같은 이름을 가진)에는 brew아무것도 넣지 마십시오 /usr/local/bin. 따라서 이름 충돌이 없어야하므로 /usr/local/bin이전 경로에 /bin있고 /usr/bin문제가되지 않아야합니다. * 그러나, 함께 문제를보고 ls하고 tar, 그리고 같은 다른 패키지 수집기를 사용 fink하고 port방법은 아래 (MacPorts를).

Brew 이름 충돌을 관리하는 데 도움이되는 두 가지 중 하나를 수행합니다.

  1. Brew지하실에 연결되지 않은 통을 남겨 둡니다. 재료를 설치하기 위해 brew는 도구를 원래 위치에두고에서 해당 도구에 대한 심볼릭 링크를 만듭니다 /usr/local/bin. brew이름 충돌을 원하지 않는 도구의 경우 기호 링크를 만들지 않습니다.
  2. 많은도있는 표준 도구의 모든없는 경우 /bin/usr/bin, brew의 링크를 접두사 /usr/local/bin예를 들어,을 수행 할 수 있도록하는 "G"와 함께 ls끓이기 버전을 사용하여 gls. 간단하게 할 수 ls -l있는을 /usr/local/bin하고 링크 된 파일을 찾을 - 사람들은 사람입니다 brew거기에 넣어. 참고 : brew실제 이름으로 액세스해야하는 설치된 도구는에 있습니다 /usr/local/Cellar/coreutils/8.21/libexec/gnubin.

나는 /usr/local/bin두 가지 이유로 내 길을 두지 않습니다. 그 이유는 내 대답의 맨 아래에 있습니다.

시스템에서 이름 충돌을 평가하려면 brew doctor이 섹션을 사용 하여 찾으십시오 brew doctor. 관심있는 출력은 다음과 같습니다 .

Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:

    ctags
    emacs
    emacsclient
    etags
    ex
    git
    git-cvsserver
    git-receive-pack
    git-shell
    git-upload-archive
    git-upload-pack
    rview
    rvim
    view
    vim
    vimdiff
    vimtutor
    xxd

Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
    echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

내가 넣어하지 않는 이유 brew'를하기 때문에 처음의 도구, 사실, 전혀이며, brew설치 lstar명령, 사실, 제대로 내가 확인 마지막 시간 (지난 주이었다) 파일 시스템 ACL을 처리하지 않는, 그들은 weren 히' t는 전혀 다루지 않았다 . 이것은 큰 문제이며, 오른쪽 man설정과 함께 태그 를 지정하는 관련 페이지 구성 문제 와 함께이를 피하기 위해 관련 도구, 특히 및에 있는 도구 를 먼저 배치해야합니다.$PATHOSX/bin/usr/bin

심지어 넣지 않는 또 다른 이유 /usr/local/bin때문에 모든 나의 경로는 brew다른 사람들과 잘 재생되지 않으며, finkport(MacPorts를) 방법이 더 내가 필요로하는 현재 패키지 지원 한 NOW를 . 예를 들어와 gnome-terminal함께 할 수 는 fink있지만 수식을 만들고 같은 작업을 수행하는 것이 큰 노력입니다 brew. 그래서, 난 계속 /sw하고 /opt내 검색 $PATH(대한 finkport각각) 및 참조 것을 나는에서 필요한 /usr/local/bin포함 gnat, 중 철자, 또는 내가 사용 bash alias'을들, 또는 나는 소스 setup내가 쓸 때 완전히 다른 환경에 대한 파일을 Ada코드를.

문제는 실제로 당신이 원하고 필요로하는 것에 달려 있습니다.

위에서 언급 한 ACL 문제의 예는 다음과 같습니다.

표준 OSX도구로 :

$ /bin/ls -le /var/root | head -7
total 24
drwx------+  3 root  wheel  102 May 28  2013 Desktop
 0: group:everyone deny delete
 1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
drwx------+  6 root  wheel  204 Sep 19 14:22 Documents
 0: group:everyone deny delete
 1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit

brew설치된 도구 와 함께 :

$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.

$ /usr/local/bin/gls --help | grep -i acl

비슷한 결과를 얻을 수 tar있으며 다른 많은 brew도구를 모릅니다 .하지만 ACL문제 로 인해 6 개월 동안 문제 가 생길 수있는 사람은 누구입니까 !


유용한 정보를 주셔서 감사합니다. 그러나 참고로 지금 내 시스템에는 / usr / bin 및 / usr / local / bin에 동일한 이름의 실행 파일이 있습니다 (예 : git, 당신은 주목 한대로 링크 됨). 따라서 기본적으로 충돌합니다. 또한 쉘 작업을 위해 시스템 도구를 재정의하고 싶습니다.
rholmes

4

여기에는 좋은 답변이 많이 있습니다. 내 꺼야 :

echo >> ~/.bashrc alias my="PATH=/usr/local/bin:$PATH"
. ~/.bashrc
my git --version # Brew's fancy git
git --version # Apple's old crusty git

각 프로그램에 대해 별도의 별명을 작성하지 않아도되며 보너스로 필요할 때 기본 설치에 액세스 할 수 있습니다.

ZSH를 사용하는 경우에도 동일하게 작동합니다. 그냥 전환 bashrc을 위해 zshrc. 당신은 밖으로 전환 할 수 있습니다 my위해 _또는 @입력에 저장합니다.


2

PATH를 엉망으로 만드는 대신 (내 역사에서 몇 달 후에 다시 태워 왔습니다) zsh 사용자 정의 별칭 디렉토리 (~ / .zshrc / custom / git_alias.zsh)에 git의 별칭을 추가했습니다.

alias git='/usr/local/bin/git'


0

$PATH실제로 변경을 원하는 사용자 와 같은 환경 변수에 대한 변경을 제한하는 것을 선호합니다 . 따라서 간단히 다음을 추가하십시오 ~/.bashrc.

export PATH="$(brew --prefix)/bin:$PATH"

0

터미널에서 다음 명령을 실행할 수 있습니다. SHELL "rc"init 파일 (bash, zsh, csh)의 경로에 brew 홈 디렉토리 + / bin을 추가합니다.

echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc

즐겨 !

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