Global PATH ortam değişkenini OS X'te nasıl ayarlarım?


101

Tüm kullanıcı mermileri ve GUI uygulamalarının aynı PATH ortamını elde etmesi için OS X'teki global PATH ortam değişkenine eklemek istiyorum.

Kabuk başlangıç ​​komut dosyalarındaki yolu ekleyebileceğimi biliyorum, ancak bu ayarlar GUI uygulamaları tarafından devralınmıyor.

Şimdiye kadar bulduğum tek yol, /etc/launchd.conf içindeki PATH ortam değişkenini yeniden tanımlamak :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Gerçekten de PATH'a ekleme yapmanın bir yolunu bulamadım launchd.conf.

Bu yöntem hakkında biraz endişeliyim ama şu ana kadar çalışan tek şey bu. Daha iyi bir yolu var mı?



2
Yosemite ve sonrası için bkz. Stackoverflow.com/questions/25385934/…
thSoft

Buradaki cevapların hiçbiri OP'nin sorusunu ele almıyor. Ama thSoft tarafından burada yorum paraya doğru! Belki de bu birleştirilmiş veya söz konusu soruya bağlanmış olmalıdır: stackoverflow.com/questions/25385934/…
Kevin Buchs 19

Yanıtlar:


71

palmer'ın GUI bilgisi doğrudur, ancak kabuk tarafından görülen yolu değiştirmek için daha sürdürülebilir bir yol vardır. Gibi mediaslave dedi , düzenleyebilir /etc/paths, ancak daha da iyi bir metin dosyası bırakabilirsiniz /etc/paths.d/bunun bir yolu vardır ve tüm kabuklar doğru yolu inşa edecek.

Örneğin, sistemimde:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
Güzel, teşekkürler! Not: Bu işlemden önce çıkış yapıp tekrar giriş yapmanızı gerektirir.
weronika

@weronika: İstifa etmenin ve yeniden başlatmanın yeterli olduğunu X11(tamamen çıkış yapmaktan daha az acı verici) buldum . Ben denemedim Terminal.
Peter Gluck,

Terminalden bahsediyordum - haklısın, belirtmeyi unuttum.
weronika

8
Bunu bilmek iyi, ancak bu mekanizmanın GUI uygulamaları için geçerli olmadığı konusunda OP'nin sorusunu yanıtlamıyor. OP bir arıyordu birleşik onu sağlayan çözümü eklemek varsayılan $PATH.
mklement

Burada "sistemim" ile ne demek istiyorsun, @cogg? Hepimiz burada OS X kullanmıyor muyuz? Üzgünüm ama hala OS X için yeniyim. OS X 10.7 kullanıyorum
ericn

48

/etc/launchd.conf

launchd.confDosyasıdır ** üzerinde komut satırı ve GUI hem uygulamalar için çalışacak tek komple çözüm OS X v10.8 (Dağ Aslanı) ve v10.9 tüm kullanıcılar için, (Mavericks), GUI ve konsol uygulamaları ile çalışacak biri .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Eklemek

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Yukarıdaki örnekte /usr/local/binPATH için varsayılan ortam değerlerine ekledim .

Bu dosyanın bir komut dosyası olmadığını ve yerine koyma seçeneğinin olmadığını unutmayın. Ayrıca, bunları uygulamak için yeniden başlatmanız gerekir.

Unutmayın, diğerleri sadece kısmi çözümler:

  • environment.plist Spotlight aracılığıyla başlatılan uygulamalar için çalışmaz.
  • /etc/paths - sadece konsol için
  • /etc/csh.cshrcveya /etc/bashrc- sadece bazı mermiler için

Bu cevap, Mac OS X'te Ortam değişkenlerinin ayarlanması ile aynı soruya dayanmaktadır .


7
Harika keşif, ancak soru zaten lansman hakkında konuşuyor ve içindeki yolu nasıl ekleyeceğinizi soruyor .
cregox

21
Asıl soruya kendinize "gerçek cevap" olarak işaret eden bir yorum eklediniz mi?
TJ Luoma

7
Bu sizin - yardımsever - cevabınızla ima edilir, ancak sadece onu hecelemek için: OP'nin varsayılan yola ekleme isteği desteklenmez, çünkü içindeki diğer ortam değişkenlerine başvuramazsınız /etc/launchd.conf.
mklement

Global değil - komut satırı ortamı / etc / profile path_helper'i çağırdığında ve PATH'yi / etc / paths'tan ve /etc/paths.d/
Dave X

1
apple.stackexchange.com/questions/106355/… 'e göre , bu uzun bir süre Yosemite ve sonrası için işe
yaramıyor

7

Bunu kabuk bazında ayarlamanız gerekecek; Bash ve csh benzeri mermiler PATH'yi ayarlamak için aynı yapılandırma dosyalarını ve sözdizimini paylaşmaz.

Bunu yapmaya çalışmak launchctlişe yaramaz çünkü ortam değişkenleri giriş yaparken ayarlanmıştır; Unix'te bir kabuk oturumunun dışında sistem genelinde mevcut değildirler.

Yani eklemek isteyeceksin

setenv PATH "$PATH:/add/my/extra/path"

için /etc/csh.cshrcve

export PATH="$PATH:/more/paths:/

için /etc/bashrc.

GUI uygulamalarında ortam değişkenleri istiyorsanız, bu daha karmaşıktır. .MacOSX/environment.plistHer kullanıcının giriş dizininde bir dosya oluşturmanız gerekir . .MacOSXDizin olasılıkla varsayılan olarak bulunmaz, bu nedenle bunu oluşturmak gerekecek.

Dosyanın formatı şöyle:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Daha fazlası environment.plist Apple'ın sitesinde .


Ancak /etc/launchd.conf ... Hmmm ... / me 'de ayarlandığında ayarlar karıştı.
Xerxes

Gerçekten mi? Hangi ortam değişkenini orada ayarlıyorsunuz?
palmer

1
OS X 10.8'den itibaren sadece bir güncelleme: ~/.MacOSX/environment.plistyaklaşım artık desteklenmiyor ve kullanıcı seviyesinde bir yedek yok. Sistem genelinde kullanabilirsiniz /etc/launchd.conf(ve bir de * uygulama uygulaması çözümü vardır).
mklement

OP'nin sorularını cevaplamaz.
Kevin Buchs

3

Genel yolunuzu /etc/paths, her satıra bir yol olacak şekilde çizgiler ekleyerek düzenleyebilirsiniz .

sudo nano /etc/paths Seni oraya götürmeliyim.


2
Bunu bilmek iyi, ancak bu mekanizmanın GUI uygulamaları için geçerli olmadığı konusunda OP'nin sorusuna cevap vermiyor.
mklement


1

Birinin en basit ve en zarif yolu ele alıp almadığından emin değilim . En azından Mac OS X v10.6'da (Snow Leopard).

Messing [/etc/|~/.]ait [profile|bashrc]dosyalar çalışabilir, ancak biraz kesmek yüzünden. /etc/paths.d/Dizin gitmek yoludur:

  • Sudo favori düzenleyicinize.
  • Satır başına yol içeren, adında yeni bir dosya oluşturun *name*(yalnızca zaten içinde /etc/paths.d/bulunan bir şeyi adlandırmayın ) :

    /usr/X11/bin
    /Developer/usr/bin
    
  • Sonra Ekle

    eval '/usr/libexec/path_helper -s`
    

    için profileya bashrcve iyi olmalıdır gitmek.


1
Bunu bilmek iyi, ancak bu mekanizmanın GUI uygulamaları için geçerli olmadığı konusunda OP'nin sorusuna cevap vermiyor.
mklement

Dosya adı tam anlamıyla *name*mı? Yoksa sadece namemı demek istiyorsun ?
Peter Mortensen

0

Başlatmanın bunu kabul edip etmediğinden emin değilim, ancak şunu deneyin:

setenv PATH "$ PATH: / my / path"

1
Maalesef bu işe yaramıyor. Launchctl 'ın çevre değişkenlerine bu kadar kolay erişimi yok gibi gözüküyor. Ortam değişkenlerini almak için bir komut var, ancak nasıl kullanılacağına dair hiçbir dokümantasyon yok.
lajos

0

Neden /etc/launchd.confaksine kullandığınızı /etc/profilebilmiyorum - ama Mac OS X konusunda uzman değilim - Çalıştığından emin olduğuma inanıyorum, ancak launchdMac OS X için Mac OS X uygulaması / değişimi init- X beni şaşırtıyor.

Her neyse, setenv PATH "$PATH:/more/paths:/and/more/paths"işe yarayacak (tcsh) ve bourn shell eşdeğeri export PATH="$PATH:/more/paths:/and/more/paths"- launchdBelirli bir kabukla nasıl ilişkili olduğu hakkında hiçbir fikrim yok.

Sanırım daha fazla soru sordum sonra cevap verdim =)


4
/ etc / profile path ayarları OS X GUI uygulamalarının hiçbirinde görünmez. Bu sadece bash için geçerlidir. Tüm uygulamaların yeni yol ayarını almasını istiyorum.
lajos

1
Unix? Tabii, bu unix. Yani, sorta. Evet, 30 yıl boyunca işe yarayan şeyleri kırdık, ama hala unix! / sigh
Matt Simmons
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.