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 git
ainda mostra aquele /usr/bin/git
que veio juntoLeão(Eu penso?). E não aquele que /usr/local/bin/git
acabou 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/bin
os padrões anteriores /usr/local/bin
no$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 $PATH
variável!?!
Então, o que eu fiz de errado?
Responder1
Achei esta postagem relacionada muito útil. Em vez de alterar a $PATH
variável, basta editar seu /etc/paths
arquivo.
Homebrew quer que eu altere meu PATH; não faço ideia de como
Assim que segui as instruções /usr/local/bin
acima /usr/bin
, meus problemas foram resolvidos.
- No OS X, abra o Terminal
- Digite o comando:
sudo vi /etc/paths
- Digite sua senha se for solicitado
- Você verá uma lista de caminhos. Edite-os para que
/usr/local/bin
o caminho seja inserido acima do/usr/bin
caminho - *Salve e saia
- 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/paths
arquivo 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 PATH
costumava 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/bin
no caminho para máxima compatibilidade. Inverter a ordem desses diretórios PATH
por edição /etc/paths
significaria 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 ~/bin
diretó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 PATH
contém ~/bin
e, caso contrário, acrescenta-o. Com isso em vigor, fazer com que apenas o gerenciado pelo Homebrew git
tenha 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/git
diretamente, 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 $HOME
para que possa adicioná-lo PATH
para 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ê PATH
para 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/bin
no seu caminho antes, /usr/bin
esse 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_profile
modo, 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/bin
sendodepois /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/bin
depois/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, brew
não coloca nada /usr/local/bin
que colida (tenha o mesmo nome de) um executável distribuído pela Apple. Portanto, ter /usr/local/bin
no caminho antes /bin
e /usr/bin
não deve ser um problema, pois não deve haver colisões de nomes. *No entanto, veja os problemas com ls
e tar
e usando outros agregadores de pacotes como fink
e port
(MacPorts), abaixo.
Brew
faz uma das duas coisas que conheço que ajudam a gerenciar colisões de nomes:
Brew
deixa 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 quebrew
não desejam colisão de nomes, não cria um link simbólico.- Para muitas, se não todas, as ferramentas padrão que também estão em
/bin
e/usr/bin
,brew
prefixam o link/usr/local/bin
com um "g", então, por exemplo, para executar umls
com uma versão brew, usegls
. Basta entrarls -l
e/usr/local/bin
procurar os arquivos vinculados - esses são os quebrew
estão lá. Nota: Asbrew
ferramentas 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/bin
meu 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 doctor
e procure esta seção - Aqui está a brew doctor
saí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 brew
as ferramentas de em primeiro lugar, na verdade, de forma alguma, é porque os comandos brew
instalados ls
e tar
nã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 man
problema de configuração de página associado que marca junto com a configuração $PATH
correta, certifico-me de colocar as OSX
ferramentas relacionadas, especialmente aquelas encontradas em /bin
e /usr/bin
, primeiro.
Outra razão pela qual nem coloquei /usr/local/bin
meu caminho é porque brew
não funciona bem com os outros, e fink
( port
MacPorts) atualmente tem muito mais pacotes suportados do que precisoAGORA. Por exemplo, posso conseguir gnome-terminal
, fink
mas seria um grande esforço construir uma fórmula e fazer o mesmo com brew
. Portanto, mantenho /sw
e /opt
em minha pesquisa $PATH
(por fink
e 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 setup
arquivo para um ambiente totalmente diferente quando escrevo Ada
có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 OSX
ferramentas 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 brew
ferramentas 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 tar
e não conheço muitas outras brew
ferramentas, mas quem pode se dar ao luxo de quebrar algo daqui a 6 meses por causa de um ACL
problema!