Hombrew yüklü araçların bulunması için PATH değişkenini Mac'imde nasıl ayarlamalıyım?


86

Kurmak çalışılıyor Homebrew (önceki Mac'lerde ben kaynağından paketleri yükleme olurdu) yeni Mac.

Yüklemeye çalıştığım ilk paket Git oldu:

$ brew install git

Kurulum tamam oldu, ama which gityine /usr/bin/gitde Lion ile gelenleri gösteriyor (sanırım?). Ve içinde /usr/local/bin/gitolan henüz kurulmamış.

$ 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

Gördüğünüz gibi /usr/binönce varsayılan olarak /usr/local/biniçinde$PATH

Yani kafam karıştı! HomeBrew'un (ve yaratıcıların övünecek gibi göründüğü bir şeyin) $PATHdeğişkeni karıştırmak zorunda olmadığınızı düşündüm !?!

Peki, ne yanlış yaptım?


Daha önce yolunu karıştırdın ve yanlış sıraya koydun mu? Ayrıca bunun neden "övünen bir nokta" olduğundan emin değilim. Homebrew ... yol kavramına benzemiyor ya da değiştirmek, sisteminize özel izinler ya da başka şeyler içeren 10 farklı pist serpmeyi içeren karmaşık bir şey. ..
prodigitalson 17:11

1
yol, RVM ile ilgili olmayan kısım standart bir sorun olmalıdır. Ve hayır, yolu değiştirmek zorunda kaldığından şikayet etmiyorum. Sadece If you choose /usr/local, everything 'just works!'neyi özlediğimi merak etmem gerektiği iddiasını tekrarlıyor gibiler ... çünkü “işe yaramadı”.
Meltemi

Yanıtlar:


78

Bu yazıyı çok faydalı buldum. $PATHDeğişkeni değiştirmek yerine, sadece /etc/pathsdosyanızı düzenlemenizi sağlar .

Homebrew PATH'imi değiştirmemi istiyor; ipucu yok nasıl

Yönergeleri takip edip üstüme koyar /usr/local/binkoymaz /usr/binsorunlarım çözüldü.

  1. OS X'te, Terminal'i açın
  2. Komutu yazın: sudo vi /etc/paths
  3. Sizden istenirse şifrenizi girin
  4. Bir yol listesi göreceksiniz. Bunları, /usr/local/binyolun üstünde /usr/binyol girilecek şekilde düzenleyin
  5. *Kaydet ve çık
  6. Terminali yeniden başlat

İşte bunu yaptıktan sonra benimki neye benziyor:

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

* Bir kolonu ( :) kaydetmek ve çıkmak için , sonra da wq(aynı anda yazmak ve çıkmak için), ardından yazın Enter.

Ayrıca /etc/pathsdosyayı grafiksel bir metin düzenleyicide açabilir ve bu şekilde düzenleyebilirsiniz.

Oradaki cevabı için Stack Overflow'ta fengd yapmak için teşekkür ederiz .


Vi dimwits (benim gibi) için bir satır kesmek için d kullanın ve komut modundayken yapıştırmak için p kullanın
Gerard

10
Bununla dikkatli kullanırdım - daha iyi cevap sadece .profile / .bash_profile içindeki yolu değiştirmek ve orada dışa aktarmaktır. / Etc / paths değiştirerek, (potansiyel olarak) tüm sistem işlemlerini etkiler; PATH'i .profile / .bash_profile içinde değiştirmek, hem hesabınıza hem de komut kabuğu ile çağrılan komutları (yerelde geliştirme için benim istediğim şeydir) tercihini yerelleştirir. Eğer gerçekten temkinliyseniz, aşağıdaki cevapta @Aristotle Pagaltzis'in önerdiği şeyi yapabilirsiniz.
rholmes

1
OSX için tasarlanmış bir paket yöneticisinden basit bir kurulumun kullanıma hazır kalmamasının son derece yanlış bir şey olduğunu düşünmeyi bıraktığınızda bir nokta var mı? Yolunuzu değiştirmek, potansiyel olarak kırılmış bir "düzeltme" ve BTW'dir, bu önerilen düzeltmeyi engellememdeki neden, demleme yolumu da güncelleyememektir, ancak "yollar" zaten doğru sıradadır. Başka bir çıkmaz. Çılgınlığı durdur, kök nedenini düzelt.
Rick O'Shea

Ayrıca, var path_helperve /etc/paths.d.
Simon Wright,

29

Bu cevap modası geçmiş. Tercih edilen Homebrew PATHsıralaması açıklandığı gibi olmuştur, ancak bu artık doğru değildir. Bununla birlikte, yaklaşım daha genel olarak uygulanabilir, bu yüzden faiz uğruna, onu bırakıyorum.


Yapmamalısın.

Homebrew kasıtlı tutar /usr/local/bin sonra /usr/bin maksimum uyumluluk için yolunda. Bu dizinlerin sırasını Geri PATHdüzenleme ile /etc/pathsanlamına geleceğini tüm her yerde sistem üzerinde programlar olurlarsa olsunlar başlandı nasıl bir komut Homebrew versiyonunu alacak. Ancak bazıları Apple'ın sürümünü özellikle bekleyebilir veya daha yeni bir sürüm kullanamayabilir.

Bu prensibi nasıl koruyabilir ve hala Homebrew yüklü versiyonunu elde edebilirim git? Söylediği gibi, tüm problemler bir dolaylı katmanla (çok fazla dolaylı katmana sahip olmak hariç) çözülebilir. - Veya bu durumda, göründüğü gibi, iki kat.

Özellikle, ~/binbaşlangıçta koyduğum bir dizine sahip olmak Unix alışkanlıklarımın bir parçasıydı PATH. Bu benim ilk şeylerden biri .bashrc:

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

Bu , içerip PATHiçermediğini kontrol eder ~/binve hazırlamaz. Bunun gerçekleştiği yerde, seçici bir şekilde sadece Homebrew tarafından yönetilen git( Homebrew tarafından yönetilen her ikilik yerine) sistem sürümüne göre öncelik kazanması ve (sadece GUI programları da dahil olmak üzere herhangi bir yerden başlatılan tüm programlar yerine) kabuk oturumlarınız için öncelik kazanması onu birbirine bağlamak kadar basit:

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

Sen olabilir sembolik bir link /usr/local/Cellar/git/1.8.2.1/bin/gitdoğrudan, ama o zaman da sembolik link Bir yaptılar her zaman düzeltmek zorunda kalacak brew upgrade git(doğrudan veya dolaylı). Homebrew'in sabit konumlu sembolik bağlantısına bağlanarak, endişelenmenize gerek yok.

Böylece bir dizin eklersiniz, $HOMEböylece onu eklersiniz, PATHböylece bir bağlantıya bağ kurabilirsiniz, bu da probleminizi düzeltir ve Dr Seuss'a gülümser. Yo dawg Sürüleri sevdim, PATHböylece bir yol koyarız, böylece siz bağ kurarken bağlayabilirsiniz.


1
Mükemmel, bu tam olarak merak ettiğim şeyi cevaplıyor!
N_A

Bu doğru cevabı SEEMS, ancak çalıştırmak için tam komutları çözemiyorum. Sembolik bağlantılar oluştururken "Dosya var" ı almaya devam ediyorum.
Ryan,

Size yardımcı olmak için yeterli ayrıntı yok, üzgünüm.
Aristo Kapısı Pagaltzis

1
@Ryan komutunda hakemlerin sırası olduğundan emin olun ln. İlk yol hedef ve ikincisi sembolik bağlantı
Freedom_Ben

1
El kap üzerine, eskimişim cevap başarısız oldu ve .zshrc dosyanızda içinde yolun sırasını düzenleyerek (I zsh kullanın) ile başarılı, bu doğruexport PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Urs

17

Yanlış bir şey yapmadınız, ancak belli bir sorunun çözülmesinden /usr/local/binönce yolunuzda olsaydı çok açık görünüyor /usr/bin. En kolay çözüm tam da bunu yapmak ve bunun gibi bir şey koymak

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

senin ~/.bash_profileiçinde Homebrew'in yüklediği her şey ilk önce bulunur. Mac'ime kurduğum yol budur ve bu uzun süredir benim için çalıştı, ancak YMMV.

Görünüşe /usr/local/bingöre peşinde olacağına inanıyor gibi gözüküyorlar /usr/bin, bu yüzden kendiminkini almış $PATHolabilirken, belgelerinin nerede olmadığını görebiliyorum:

Eğer koymak gerektiğini unutmayın /usr/local/binsonra /usr/bin onlar yeni Homebrew versiyonunu alırsanız bazı programlar örneğin yakut, sistem sürümünü almak için beklemek çünkü ve bölünürler.

Gönderen wiki & demlemek doktor # 10738 arasındaki tutarsızlığı . Bu belgenin "SSS (yukarıdaki alıntı) GUI uygulamaları için PATH ayarını; doktor ( PATH'ınızın /usr/local/binönüne koymak için tavsiye /usr/bin) PATLI ayarını CLI uygulamaları için belirtir."


1
Bu /usr/local/binbenim için iki tane bırakmaz $PATHmı? Öyle inanıyorum. Bunun yerine varsayılan yolların sırasını mı /etc/pathsyoksa içeriğinin içeriğini /etc/paths.dmi düzenlememiz gerektiğini merak ediyorum . Ama bu her kullanıcıyı etkileyecek ... belki de kötü bir şey değil. Her neyse, sadece diğer insanların buna nasıl yaklaştığını görmek istedim.
Meltemi

@Meltemi, bu cevabın ruhu doğrudur: sizin güncellemek PATHiçin (sizin seçtiğiniz şekilde) /usr/local/binönce gelir /usr/bin. Ben şahsen benim güncellemek PATHin .bash_profileburada önerildiği gibi.

@ Nick-ilginç bilgiler ... ve sadece konuların kafasını karıştırmaya hizmet ediyor (en azından benim meselelerim) ... Homebrew doktorları Terminal komutlarının yolda /usr/local/binolsa bile uygulamaları seçmeleri gerektiğini ima ediyor gibi görünüyor /usr/bin. Ancak GUI uygulamalarının özel bir kodlamaya ihtiyacı var mı? BT , GUI olsun ya da olmasın tüm uygulamalar $ PATH değişkenini ayarlamamıza gerek duyar. Öyleyse, ben (veya Homebrew yaratıcıları) ne eksik?
Meltemi

Sanırım Homebrew ilk önce Apple tarafından tedarik edilebilir olanı kullanmak istediğinizi varsayıyor - git
Lion'ın

Bu konuda Mark ile aynı fikirdeyim. MacPorts ve Fink ile, varsayımlar, kutudan çıkan Apple'dan tamamen bozulmamış, ayrı bir ortam sağlamaktı. Homebrew, Apple'ın eşyalarının harika olduğu ve onu kullanmaktan kaçınmamak için tavrını aldı (neden Apple'ın yapması gerektiğinde gcc'nin başka bir sürümünü indirin?).
Nick Klauer

6

Ben jthomaların cevaplarına katılmıyorum. / Etc / paths dosyanızı düzenlemek, tüm programların yükleme yollarını değiştirir. Bu, bir sistem uygulamasının bir ikili dosyanın belirli bir sürümünü bulmasını bekliyorsa ancak yollar dosyanızı düzenlediğiniz için farklı bir sürüm buluyorsa tehlikeli olabilir. Bunun yerine, yol değişkeninizi ~ / .bashrc (veya ~ / .bash_profile) olarak değiştirin. O zaman yük yolun sadece terminalin içinde değişecek

# PATH
ihracatına homebrew uygulaması ekle PATH = / path / to / homebrew / app / bin: $ PATH

Ardından bash'ı yeniden yükleyin veya source ~/.bashrcgitmeniz iyi olur. Homebrew yolu başka hiçbir şeyden önce geldiğinden, bash, homebrew ile indirdiğiniz sürümü yükleyecektir.


OS X'te, .bashrcvarsayılan olarak yüklenmez. El ile kaynak veriyor musunuz?
slhck

Ah evet. Ubuntu’dan OS X’ten gelmiştim ve .bashrckaynak kullanmaya alışmıştım .bash_profile. Rc dosyasını oluşturmak istemiyorsanız, komutu kendinize ekleyebilirsiniz .bash_profile.
Nathan,

5

Anladığım kadarıyla, Apple dağıtılmış bir çalıştırılabilirle aynı çarpışmaya (aynı ada sahip) brewhiçbir şey /usr/local/binkoymuyor. Bu nedenle, sahip /usr/local/binöncesi yolunda /binve /usr/binhiçbir ad çarpışmalar olması gerektiğini, çünkü bir sorun olmamalıdır. * Ancak, sorunlar görüyorum lsve tarve benzeri diğer paket toplayıcılar kullanılarak finkve portyolu aşağıda, (MacPorts).

Brew Ad çarpışmalarını yönetmeye yardımcı olduğunu bildiğim iki şeyden birini yapıyor:

  1. BrewBağlanmamış fıçıları Cellar'da bırakır. Bir şeyler yüklemek için, demlemek bulundukları aletleri bırakır ve içindeki araçlara sembolik bağlantılar oluşturur /usr/local/bin. brewAd çarpışması istemeyen araçlar için sembolik bir bağlantı oluşturmaz.
  2. İçin birçok da vardır standart tüm araçları değilse /binve /usr/bin, brewbağlantıyı önek /usr/local/binörneğin bir gerçekleştirme böylece, bir "g" ile lsbir demleme sürümü, kullanımı ile gls. Basitçe bir ls -lgiriş yapın /usr/local/binve bağlantılı dosyaları arayın - bunlar breworada belirtilenlerdir. Not: brewGerçek adlarıyla erişilmesi gereken yüklü araçlar içinde bulunur /usr/local/Cellar/coreutils/8.21/libexec/gnubin.

Ben koymayın /usr/local/biniki nedenden dolayı benim yolunda - o nedenleri cevabım alt kısmındadır.

Sisteminizdeki isim çarpışmalarını değerlendirmek brew doctoriçin bu bölümü kullanın ve arayın - İşte brew doctorilgilendiğiniz çıktı:

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

Ben koymayın nedeni brew'çünkü ilk ler araçları, aslında, hiç de vardır brewyüklü lsve tarkomutlar, aslında, düzgün son kontrol zamanı (geçen hafta olduğu) dosya sistemi ACL ilgilenmem, onlar değildin' hiç ele alınmadı . Bu BÜYÜK bir sorundur ve ilişkili birlikte tümüyle önlemek için manayarlama ile birlikte etiketleri sayfa yapılandırma sorunu $PATH, ben koymak emin hakkını OSXözellikle de bulunan ilgili araçları, /binve /usr/binilk.

Hiçbir zaman /usr/local/binyoluma koymamamın bir başka nedeni brewde, diğerleri ile iyi oynamaması finkve port(MacPorts) şu anda ŞİMDİ ihtiyacım olan daha çok desteklenen paketlere sahip olmasıdır . Mesela ben alabilirim gnome-terminalile finkancak aynı bir formül oluşturmak için büyük bir çaba ve yapacağını brew. Bu nedenle, araştırmamda ( sırasıyla ve sırasıyla) tutarım /swve hecelenmiş veya dahil olmak üzere ihtiyaç duyduğum şeylere atıfta bulunurum veya kod yazarken tamamen farklı bir ortam için bir dosya kaynaklarım ./opt$PATHfinkport/usr/local/bingnatbash aliassetupAda

Mesele şu ki, o zaman gerçekten ne istediğine ve neye ihtiyacın olduğuna bağlı.

İşte yukarıda bahsettiğim ACL problemine bir örnek.

Standart OSXaletlerle:

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

ve brewyüklü araçlarla:

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

ve

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

Benzer sonuçlar alacaksınız tarve ben evimde pek çok başka brewaraç tanımıyorum , ancak bir ACLsorun nedeniyle 6 ay boyunca bir şeyi kırabilecek kim var ?


Yararlı bilgiler için teşekkürler. Ancak bir not olarak, şu an sistemimde, hem / usr / bin hem de / usr / local / bin'de aynı adı taşıyan çalıştırılabilir dosyalarım var (örneğin, sizin belirttiğiniz gibi işaretli Git). Dolayısıyla, varsayılan olarak çatışma yaparlar. Ayrıca kabuk çalışmam için sistem araçlarını geçersiz kılmak istiyorum.
rholmes

4

Burada bir sürü iyi cevap var. Benimki burada:

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

Her program için ayrı bir takma ad oluşturmak zorunda kalmanızı sağlar ve bir bonus olarak, ihtiyaç duymanız durumunda varsayılan yüklemeleri erişilebilir kılar.

ZSH kullanıyorsanız, aynı şekilde çalışır; sadece dışarı geçiş bashrciçin zshrc. Yazarak tasarruf etmek myiçin _hatta çıkabilirsiniz @.


2

PATH ile uğraşmak yerine (ki geçmişimde aylar sonra beni yakmak için geri geliyor) zsh custom aliases dizinime git için bir takma ad ekledim (~ / .zshrc / custom / git_alias.zsh).

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


0

Değişikliği $PATHisteyen kullanıcılar gibi ortam değişkenlerinde değişiklikleri sınırlamayı tercih ederim . Böylece, sadece aşağıdakileri ekliyorum ~/.bashrc:

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

0

Bir terminale aşağıdaki komutu verebilirsiniz, bu, her hangi bir SHELL "rc" init dosyanızın (bash, zsh, csh) PATH bölümüne brew home dizini + / bin'i ekleyecektir.

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

Keyfini çıkarın !

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.