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

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

설정하는 중홈브류새 Mac에서(이전 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

그래서 혼란스러워요! 내가 생각한 요점은홈브루(그리고 제작자가 자랑하는 것 같은 것은) 변수를 망칠 필요가 없다는 것입니다 $PATH!?!

그럼 내가 뭘 잘못했나요?

답변1

관련 게시물이 매우 도움이 되었다고 생각합니다. 변수 를 변경하는 대신 파일을 $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를 방문하세요.

답변2

이 답변은 더 이상 사용되지 않습니다. 선호되는 홈브루 PATH순서는 설명과 같았지만 더 이상 사실이 아닙니다. 그러나 이 접근 방식은 더 일반적으로 적용 가능하므로 관심을 끌기 위해 그대로 두겠습니다.


그렇게해서는 안됩니다.

홈브류는 의도적으로/usr/local/bin ~ 후에 /usr/bin최대 호환성을 위한 경로에 있습니다. PATH편집을 통해 이러한 디렉토리의 순서를 바꾸는 것은 /etc/paths다음을 의미합니다.모두시작 방법에 관계없이 시스템의 모든 프로그램은 Homebrew 버전의 명령을 받게 됩니다. 그러나 일부는 특별히 Apple 버전을 기대하거나 최신 버전을 사용할 수 없는 경우도 있습니다.

이 원칙을 유지하면서 Homebrew가 설치된 버전을 계속 얻는 방법은 무엇입니까 git? 속담처럼 모든 문제는 간접 계층으로 해결될 수 있습니다(간접 계층이 너무 많은 경우 제외). — 또는 이 경우에는 두 개의 레이어로 밝혀졌습니다.

~/bin특히, 내 Unix 시작 부분에 디렉토리를 두는 것이 내 Unix 습관의 일부였습니다 PATH. 이것은 my 의 첫 번째 비트 중 하나입니다 .bashrc.

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

PATH포함 여부를 확인 ~/bin하고 포함되어 있지 않으면 앞에 추가합니다. 이를 적용한 다음 선택적으로 Homebrew 관리 버전만 git시스템 버전보다 우선하도록 만듭니다(대신모든Homebrew 관리 바이너리) 및 쉘 세션 전용(대신모두GUI 프로그램을 포함하여 어디서나 시작되는 프로그램)은 심볼릭 링크만큼 간단합니다.

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

~할 수 있었다하지만 그렇게 하면 (직접 또는 간접적으로) 작업을 수행할 때마다 심볼릭 /usr/local/Cellar/git/1.8.2.1/bin/git링크를 수정해야 합니다 . brew upgrade gitHomebrew의 고정 위치 심볼릭 링크에 심볼릭 링크를 연결하면 이에 대해 걱정할 필요가 없습니다.

따라서 디렉토리를 추가하여 심볼릭 링크에 심볼릭 링크할 수 있도록 $HOME추가하면 PATH문제가 해결되고 Dr Seuss가 미소를 지을 것입니다. Yo dawg 나는 당신을 심볼릭 링크처럼 모아서 심볼릭 링크 PATH를 하는 동안 심볼릭 링크를 할 수 있도록 경로를 제공합니다 .

답변3

당신은 아무 잘못도 하지 않았지만, 이 특정한 문제가 /usr/local/bin해결되기 전에 당신의 길에 있었다면 그것은 /usr/bin사라질 것이라는 것이 꽤 분명해 보입니다. 가장 쉬운 수정은 그렇게 하고 다음과 같은 것을 넣는 것입니다.

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

Homebrew가 설치하는 모든 것이 ~/.bash_profile먼저 발견됩니다. 이것이 제가 Mac에 설정한 방식이며 오랫동안 저에게 효과적이었습니다. 그러나 YMMV.

/usr/local/bin그들은 그것이 존재 와 함께 작동할 것이라고 믿는 것으로 보입니다.~ 후에 /usr/bin, 그래서 내가 직접 작성한 내용을 망쳤을 수도 있지만 $PATH문서가 부족한 부분을 알 수 있습니다.

일부 프로그램은 Ruby와 같은 시스템 버전을 가져오고 최신 Homebrew 버전을 가져오면 중단될 것으로 예상하므로 /usr/local/bin뒤에 넣어야 합니다 ./usr/bin

에서Wiki와 Brew Doctor 간의 불일치 #10738. 이 문서에서는 계속해서 "FAQ(위 인용문)는 GUI 앱의 PATH 설정을 참조하고, 의사( PATH에 /usr/local/bin앞서 적용해야 할 조언)는 CLI 앱의 PATH 설정을 참조합니다."라고 설명합니다./usr/bin

답변4

내가 이해하는 바로는 Apple 배포 실행 파일과 충돌하는(동일한 이름을 가진) brew어떤 것도 넣지 않습니다 . /usr/local/bin따라서 /usr/local/bin이전 경로에 이름 충돌이 없어야 하므로 문제가 되지 않습니다 /bin. *그러나 아래에서 및 (MacPorts) 와 같은 다른 패키지 수집기 사용 및 /usr/bin문제를 참조하세요 .lstarfinkport

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을 제대로 처리하지 못하기 때문입니다. 사실 제가 마지막으로 확인했을 때(지난주였습니다),전혀 처리되지 않았어. 이것은 큰 문제이며 이를 완전히 방지하기 위해 man권리 설정과 함께 태그를 지정하는 관련 페이지 구성 문제 와 함께 관련 도구, 특히 및 에 있는 도구를 먼저 $PATH배치했는지 확인합니다 .OSX/bin/usr/bin

/usr/local/bin내가 내 길을 전혀 선택하지 않는 또 다른 이유 는 brew다른 사람들과 잘 작동하지 않고 fink( portMacPorts) 현재 필요한 지원 패키지가 훨씬 더 많기 때문입니다.지금. 예를 들어 gnome-terminal를 사용하면 얻을 수 있지만 fink공식을 구성하고 를 사용하여 동일한 작업을 수행하려면 큰 노력이 필요할 것입니다 brew. 그래서 나는 코드를 작성할 때 철자를 사용하거나 을 사용 하거나 완전히 다른 환경을 위한 파일을 소싱하는 등 에서 필요한 항목을 검색 ( 각각 및 ) /sw하고 참조합니다 ./opt$PATHfinkport/usr/local/bingnatbash aliassetupAda

문제는 실제로 당시에 당신이 원하고 필요한 것이 무엇인지에 달려 있다는 것입니다.

위에서 언급한 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문제로 인해 6개월 후에 무언가를 중단할 여유가 있는 사람이 누구입니까 ACL!

관련 정보