Tentando configurar o Homebrew em um novo Mac (em Macs anteriores eu instalaria pacotes a partir da fonte).
O primeiro pacote que tentei instalar foi o Git:
$ brew install git
A instalação correu bem, mas which git
ainda mostra a /usr/bin/git
que acompanha o Lion (acho?). E não aquele /usr/local/bin/git
que 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 os /usr/bin
padrões anteriores /usr/local/bin
no$PATH
Então, eu estou confuso! Eu pensei que o objetivo do HomeBrew (e algo que os criadores parecem se gabar) era que você não precisa mexer com a $PATH
variável!?!
Então, o que eu fiz de errado?
If you choose /usr/local, everything 'just works!'
que eu tenho que me perguntar o que estou perdendo ... porque não "apenas funciona".Respostas:
Achei este post relacionado muito útil. Em vez de alterar a
$PATH
variável, basta editar o seu/etc/paths
arquivo.Homebrew quer que eu altere meu CAMINHO; nenhuma pista de como
Assim que segui as instruções e pus
/usr/local/bin
acima/usr/bin
, meus problemas foram resolvidos.sudo vi /etc/paths
/usr/local/bin
caminho seja inserido acima do/usr/bin
caminhoAqui está a minha aparência depois que eu fiz isso:
* Para salvar e sair, digite dois pontos (
:
) e digitewq
(para escrever e sair ao mesmo tempo), seguido por Enter.Você também pode abrir o
/etc/paths
arquivo em um editor de texto gráfico e editá-lo dessa maneira.Crédito para se vingar de Stack Overflow por sua resposta lá.
fonte
path_helper
e/etc/paths.d
.Esta resposta é obsoleta. O
PATH
pedido Homebrew preferido costumava ser o que foi explicado, mas isso não é mais verdade. No entanto, a abordagem é mais aplicável em geral; portanto, pelo interesse, estou deixando de lado.Você não deveria.
Homebrew mantém intencionalmente
/usr/local/bin
depois/usr/bin
no caminho para compatibilidade máxima. Inverter a ordem desses diretóriosPATH
editando/etc/paths
significa que todos os programas em qualquer lugar do sistema, independentemente de 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 instalada do Homebrew
git
? Como diz o ditado, todos os problemas podem ser resolvidos com uma camada de indireção (exceto com muitas camadas de indireção). - Ou neste caso, como se vê, duas camadas.Especificamente, faz parte dos meus hábitos no Unix ter um
~/bin
diretório que eu coloquei no início do meuPATH
. Este é um dos primeiros bits no meu.bashrc
:Isso verifica se o
PATH
contém~/bin
e, se não, o precede. Com isso em prática, fazer seletivamente apenas o gerenciado pelo Homebrewgit
ter precedência sobre a versão do sistema (em vez de todos os binários gerenciados pelo Homebrew) e apenas as sessões do shell (em vez de todos os programas iniciados de qualquer lugar, incluindo programas da GUI), é tão simples quanto simbolizando:Você pode ligar o link simbólico
/usr/local/Cellar/git/1.8.2.1/bin/git
diretamente, mas precisará corrigi-lo toda vez que fizer umbrew upgrade git
(direta ou indiretamente). Ligando o link simbólico para local fixo do Homebrew, você não precisa se preocupar com isso.Então você adiciona um diretório ao seu,
$HOME
para poder adicioná-PATH
lo a um link simbólico, e isso resolve o seu problema e coloca um sorriso no Dr. Seuss. Yo dawg Eu agrupo você como links simbólicos, então colocamos um caminho no seuPATH
para que você possa fazer o link simbólico enquanto faz o link simbólico.fonte
ln
comando. O primeiro caminho é o alvo, e o segundo é o link simbólico #export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Você não fez nada de errado, mas parece bastante claro que se você estivesse
/usr/local/bin
no seu caminho antes que/usr/bin
esse problema específico desaparecesse. A solução mais fácil é fazer exatamente isso e colocar algo comono seu
~/.bash_profile
tudo o que o Homebrew instala é encontrado primeiro. Essa é a maneira que eu o configurei no meu Mac e funcionou para mim por tanto tempo, no entanto, o YMMV.Parece que eles acreditam que ele iria trabalhar com
/usr/local/bin
sendo depois/usr/bin
, por isso, enquanto eu poderia ter estrumado meu próprio$PATH
, eu posso ver onde a sua documentação não tem:Da discrepância entre wiki & brew doctor # 10738 . Observe que este documento continua dizendo: "As perguntas frequentes (a citação acima) se referem à configuração PATH para aplicativos de GUI; o médico (o conselho a colocar
/usr/local/bin
à frente/usr/bin
em seu PATH) refere-se à configuração PATH para aplicativos de CLI".fonte
/usr/local/bin
s no meu$PATH
? Eu acredito que sim. Gostaria de saber se deveríamos editar a ordem dos caminhos padrão/etc/paths
ou o conteúdo de/etc/paths.d
? Mas isso afetará todos os usuários ... talvez não seja uma coisa ruim. Enfim, só queria ver como as outras pessoas abordaram isso.PATH
(da maneira que você escolher) para ter/usr/local/bin
precedido/usr/bin
. Eu, pessoalmente, atualizar meuPATH
em.bash_profile
como sugerido aqui./usr/local/bin
mesmo que estejam/usr/bin
no caminho. Mas os aplicativos GUI precisam de coddling especial? Parece que todos os aplicativos, GUI ou não, precisam de nós para ajustar a variável $ PATH. Então, o que estou perdendo (ou os criadores do Homebrew)?Eu discordo da resposta de jthomas. A edição do seu arquivo / etc / caminhos alterará os caminhos de carregamento para todos os programas. Isso pode ser perigoso se um aplicativo de sistema estiver esperando encontrar uma versão específica de um binário, mas encontrar uma versão diferente porque você editou o arquivo de caminhos. Em vez disso, altere sua variável de caminho em ~ / .bashrc (ou ~ / .bash_profile). Então o seu caminho de carga mudará apenas dentro do terminal:
Em seguida, recarregue o bash ou
source ~/.bashrc
e pronto. Como o caminho do homebrew vem antes de qualquer outra coisa, o bash carregará a versão que você baixou com o homebrew.fonte
.bashrc
não é carregado por padrão. Você o origina manualmente?.bashrc
então eu o fonte do meu.bash_profile
. Se você não deseja criar o arquivo rc, pode adicionar o comando ao seu.bash_profile
.Pelo que entendi,
brew
não coloca nada/usr/local/bin
que colide (tem o mesmo nome que) um executável distribuído da Apple. Portanto, ter/usr/local/bin
o caminho antes/bin
e/usr/bin
não deve ser um problema, porque não deve haver colisão de nomes. * No entanto, veja os problemas comls
etar
, e usando outros agregadores de pacotes comofink
eport
(MacPorts), bem abaixo.Brew
faz uma das duas coisas que conheço que ajudam a gerenciar colisões de nomes:Brew
deixa barris não ligados na adega. Para instalar coisas, o brew deixa as ferramentas onde estão e cria links simbólicos para essas ferramentas/usr/local/bin
. Para ferramentas quebrew
não desejam colisão de nomes, não cria um link simbólico./bin
e/usr/bin
,brew
prefixam o link/usr/local/bin
com um "g", por exemplo, para executar umals
versão com brew, usegls
. Basta fazer umals -l
no/usr/local/bin
e procurar os arquivos vinculados - esses são osbrew
colocou 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
.Eu não coloco
/usr/local/bin
no meu caminho por duas razões - essas razões estão na parte inferior da minha resposta.Para avaliar as colisões de nomes em seu sistema, use
brew doctor
e procure esta seção - Aqui está obrew doctor
resultado interessante:A razão pela qual eu não coloco
brew
as ferramentas em primeiro lugar, de fato, é que não, porque os comandosbrew
instaladosls
etar
não lidam com a ACL do sistema de arquivos de fato, na última vez que verifiquei (que foi na semana passada), eles não estavam ' t tratado de todo . Esse é um problema GRANDE e, para evitá-lo por completo, junto com oman
problema de configuração de página associado que marca junto com a configuração$PATH
correta, certifique-se de colocar asOSX
ferramentas relacionadas, especialmente as encontradas em/bin
e/usr/bin
, primeiro.Outra razão que eu nem sequer colocar
/usr/local/bin
no meu caminho em tudo é porquebrew
não joga bem com os outros, efink
eport
(MacPorts) têm forma mais pacotes no momento que eu preciso suportado EMPRESA . Por exemplo, eu posso começargnome-terminal
comfink
, mas seria um grande esforço para construir uma fórmula e fazer o mesmo combrew
. Portanto, mantenho/sw
e/opt
em minha pesquisa$PATH
(porfink
eport
, respectivamente) e as referências de que preciso/usr/local/bin
, incluindognat
, por extenso ou usobash
alias
, ou forneço umsetup
arquivo para um ambiente totalmente diferente ao escreverAda
código.A questão é que realmente depende do que você deseja e precisa no momento.
Aqui está um exemplo do problema da ACL que mencionei acima.
Com as
OSX
ferramentas padrão :e com as
brew
ferramentas instaladas:e
Você obterá resultados semelhantes
tar
e eu não conheço muitas outrasbrew
ferramentas, mas quem pode se dar ao luxo de ter algo quebrado 6 meses depois por causa de umACL
problema!fonte
Há uma série de boas respostas aqui. Aqui está o meu:
Economiza a necessidade de criar um alias separado para cada programa e, como bônus, deixa as instalações padrão acessíveis, caso você precise delas.
Funciona da mesma forma se você estiver usando o ZSH; apenas mude
bashrc
parazshrc
. Você pode optarmy
por_
ou mesmo@
economizar ao digitar.fonte
Em vez de mexer com o PATH (que na minha história volta a me queimar meses depois), adicionei um alias para git no meu diretório de aliases personalizados do zsh (~ / .zshrc / custom / git_alias.zsh).
alias git='/usr/local/bin/git'
fonte
Prefiro limitar as alterações às variáveis ambientais, como os
$PATH
usuários que realmente desejam a alteração. Assim, simplesmente adiciono o seguinte a~/.bashrc
:fonte
Você pode emitir o seguinte comando em um terminal, ele adicionará o diretório inicial do brew + o / bin no PATH do seu arquivo init do SHELL "rc" (bash, zsh, csh)
echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc
Apreciar !
fonte