Como devo definir a variável PATH no meu Mac para que as ferramentas instaladas no Hombrew sejam encontradas?

Como devo definir a variável PATH no meu Mac para que as ferramentas instaladas no Hombrew sejam encontradas?

Tentando configurarCerveja caseiraem um novo Mac (em Macs anteriores eu instalaria pacotes do código-fonte).

O primeiro pacote que tentei instalar foi o Git:

$ brew install git

A instalação correu bem, mas which gitainda mostra aquele /usr/bin/gitque veio juntoLeão(Eu penso?). E não aquele que /usr/local/bin/gitacabou de ser instalado.

$ 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

Como você pode ver /usr/binos padrões anteriores /usr/local/binno$PATH

Então, estou confuso! Eu pensei que o ponto deHomeBrew(e algo de que os criadores parecem se gabar) é que você não precisa mexer com a $PATHvariável!?!

Então, o que eu fiz de errado?

Responder1

Achei esta postagem relacionada muito útil. Em vez de alterar a $PATHvariável, basta editar seu /etc/pathsarquivo.

Homebrew quer que eu altere meu PATH; não faço ideia de como

Assim que segui as instruções /usr/local/binacima /usr/bin, meus problemas foram resolvidos.

  1. No OS X, abra o Terminal
  2. Digite o comando:sudo vi /etc/paths
  3. Digite sua senha se for solicitado
  4. Você verá uma lista de caminhos. Edite-os para que /usr/local/bino caminho seja inserido acima do /usr/bincaminho
  5. *Salve e saia
  6. Reinicie o terminal

Esta é a aparência do meu depois que fiz isso:

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

*Para salvar e sair digite dois pontos ( :), depois digite wq(para escrever e sair ao mesmo tempo), seguido de Enter.

Você também pode abrir o /etc/pathsarquivo em um editor de texto gráfico e editá-lo dessa forma.

Crédito paraFengd no Stack Overflow para obter sua resposta ali.

Responder2

Esta resposta está obsoleta. A ordem preferida do Homebrew PATHcostumava ser a explicada, mas isso não é mais verdade. No entanto, a abordagem é aplicável de forma mais geral, portanto, por uma questão de interesse, estou deixando-a de lado.


Você não deveria.

Homebrew mantém intencionalmente/usr/local/bin depois /usr/binno caminho para máxima compatibilidade. Inverter a ordem desses diretórios PATHpor edição /etc/pathssignificaria quetodosprogramas em qualquer lugar do sistema, não importa como foram iniciados, obterão a versão Homebrew de um comando. Mas alguns podem esperar especificamente a versão da Apple ou simplesmente não conseguir usar uma versão mais recente, etc.

Como preservar esse princípio e ainda obter a versão do Homebrew instalada git? Como diz o ditado, todos os problemas podem ser resolvidos com uma camada de indireção (exceto ter muitas camadas de indireção). — Ou neste caso, ao que parece, duas camadas.

Especificamente, faz parte dos meus hábitos Unix ter um ~/bindiretório que coloco no início do meu arquivo PATH. Este é um dos primeiros bits do meu .bashrc:

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

Isso verifica se PATHcontém ~/bine, caso contrário, acrescenta-o. Com isso em vigor, fazer com que apenas o gerenciado pelo Homebrew gittenha precedência sobre a versão do sistema (em vez detodoBinário gerenciado pelo Homebrew) e apenas para suas sessões de shell (em vez detodosprogramas iniciados de qualquer lugar, incluindo programas GUI), é tão simples quanto criar um link simbólico:

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

Vocêpoderialink simbólico /usr/local/Cellar/git/1.8.2.1/bin/gitdiretamente, mas você teria que consertar seu link simbólico toda vez que fizesse um brew upgrade git(direta ou indiretamente). Ao criar um link simbólico para o link simbólico de localização fixa do Homebrew, você não precisa se preocupar com isso.

Então você adiciona um diretório ao seu $HOMEpara que possa adicioná-lo PATHpara que possa criar um link simbólico para um link simbólico, e isso resolve o seu problema e coloca um sorriso no Dr. Seuss. Ei, cara, eu pastoreio você como links simbólicos, então colocamos um caminho em você PATHpara que você possa criar links simbólicos enquanto faz links simbólicos.

Responder3

Você não fez nada de errado, mas parece bastante claro que, se você estivesse /usr/local/binno seu caminho antes, /usr/binesse problema específico desapareceria. A solução mais fácil é fazer exatamente isso e colocar algo como

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

no seu ~/.bash_profilemodo, tudo o que o Homebrew instala é encontrado primeiro. É assim que configuro no meu Mac, e tem funcionado para mim há tanto tempo, no entanto, YMMV.

Parece que eles acreditam que funcionaria /usr/local/binsendodepois /usr/bin, então, embora eu possa ter estragado o meu $PATH, posso ver onde falta a documentação deles:

Observe que você deve colocar /usr/local/bindepois /usr/bin porque alguns programas esperam obter a versão do sistema, por exemplo, Ruby, e quebrar se obtiverem a versão mais recente do Homebrew.

DeDiscrepância entre wiki e brew doctor #10738. Observe que este documento continua dizendo: "O FAQ (a citação acima) refere-se à configuração PATH para aplicativos GUI; o médico (o conselho a ser colocado /usr/local/binà frente /usr/bin em seu PATH) refere-se à configuração PATH para aplicativos CLI."

Responder4

Pelo que entendi, brewnão coloca nada /usr/local/binque colida (tenha o mesmo nome de) um executável distribuído pela Apple. Portanto, ter /usr/local/binno caminho antes /bine /usr/binnão deve ser um problema, pois não deve haver colisões de nomes. *No entanto, veja os problemas com lse tare usando outros agregadores de pacotes como finke port(MacPorts), abaixo.

Brewfaz uma das duas coisas que conheço que ajudam a gerenciar colisões de nomes:

  1. Brewdeixa barris desvinculados na adega. Para instalar coisas, o brew deixa as ferramentas onde estão e cria links simbólicos para essas ferramentas no formato /usr/local/bin. Para ferramentas que brewnão desejam colisão de nomes, não cria um link simbólico.
  2. Para muitas, se não todas, as ferramentas padrão que também estão em /bine /usr/bin, brewprefixam o link /usr/local/bincom um "g", então, por exemplo, para executar um lscom uma versão brew, use gls. Basta entrar ls -le /usr/local/binprocurar os arquivos vinculados - esses são os que brewestão lá. Nota: As brewferramentas instaladas que devem ser acessadas por seus nomes reais são encontradas em /usr/local/Cellar/coreutils/8.21/libexec/gnubin.

Não coloco /usr/local/binmeu caminho por dois motivos - esses motivos estão no final da minha resposta.

Para avaliar as colisões de nomes em seu sistema, use brew doctore procure esta seção - Aqui está a brew doctorsaída de interesse do ':

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

A razão pela qual não coloco brewas ferramentas de em primeiro lugar, na verdade, de forma alguma, é porque os comandos brewinstalados lse tarnão lidam com a ACL do sistema de arquivos corretamente, na verdade, da última vez que verifiquei (que foi na semana passada),eles não foram tratados de forma alguma. Este é um GRANDE problema e, para evitá-lo completamente, junto com o manproblema de configuração de página associado que marca junto com a configuração $PATHcorreta, certifico-me de colocar as OSXferramentas relacionadas, especialmente aquelas encontradas em /bine /usr/bin, primeiro.

Outra razão pela qual nem coloquei /usr/local/binmeu caminho é porque brewnão funciona bem com os outros, e fink( portMacPorts) atualmente tem muito mais pacotes suportados do que precisoAGORA. Por exemplo, posso conseguir gnome-terminal, finkmas seria um grande esforço construir uma fórmula e fazer o mesmo com brew. Portanto, mantenho /swe /optem minha pesquisa $PATH(por finke port, respectivamente) e faço referência a coisas que preciso de /usr/local/bin, incluindo gnat, explicitado ou uso bash alias's, ou forneço um setuparquivo para um ambiente totalmente diferente quando escrevo Adacódigo.

A questão é que realmente depende do que você deseja e precisa no momento.

Aqui está um exemplo do problema de ACL que mencionei acima.

Com as OSXferramentas padrão:

$ /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

e com as brewferramentas instaladas:

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

e

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

Você obterá resultados semelhantes tare não conheço muitas outras brewferramentas, mas quem pode se dar ao luxo de quebrar algo daqui a 6 meses por causa de um ACLproblema!

informação relacionada