ZSH'de PATH değişkenine yeni bir giriş ekleme


189

Zsh kullanıyorum ve değişken yeni bir giriş ( /home/david/pear/bin) eklemek çalışıyorum PATHama nasıl bilmiyorum.

Beni en çok şaşırtan şey, dosyamdaki bir PATHdeğişkene tek bir başvuru olmaması ~/.zshrc, ancak echo $PATHdönüş yapmasıdır:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Yani bir PATHyerde bir değişken ayarlanıyor.

Yanıtlar:


214

Bu satırı şuraya ekleyin .zshrc:

export PATH=/home/david/pear/bin:$PATH

EDIT : Bu işe yarıyor, ancak aşağıdaki cevap daha iyidir, çünkü ZSH gibi yapılandırılmış arabirim yararlanır gibi değişkenler sağlar $PATH. Bu yaklaşım standarttır bash, ancak bildiğim kadarıyla, ZSH daha iyi alternatifler sunduğunda bunu kullanmak için hiçbir neden yoktur.


29
haha unut, bu sadece bir konsol komutuydu ama bu satırı .zshrc'ye eklemek hile yaptı. Çok teşekkürler!
David Barreto

1
Benim .zshrc zaten PATH ihracat için bir satır vardı, bu yüzden değiştirilmiş bir ile değiştirdim.
Zack Huston

6
Ben girdileri etrafında çift tırnak yani kaldırmak zorunda PATH="/home/david/pear/bin:/usr/bin:etc"için PATH=/home/david/pear/bin:/usr/bin:etco zshrc kalmak için.
a7omiton

3
@taco, $ HOME kullanabilirsiniz
mencargo

1
@DanielSpringer: Evet. Bir kabuğu açtığınızda, onu PATHbaşlatan üst işlemden miras alır ve daha sonra çalıştığında .zshrc( .bashrcveya ne olursa olsun), bu yola fazladan şeyler eklemenizi sağlar.
Linuxios

224

Aslında, ZSH kullanmak, ortam değişkenlerinin özel eşlemesini kullanmanızı sağlar. Böylece şunları yapabilirsiniz:

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH

Benim için bu, diğer değişkenlere yayılabilen çok düzgün bir özellik. Misal:

typeset -T LD_LIBRARY_PATH ld_library_path :

16
Güzel cevap. Benim durumumda, ~/.zshrcsonradan kaynaklanır .profileve içindeki her şeyin üzerine yazar .profile. Anlamak için saçımı çekerek bir süre aldım.
Khanh Nguyen

1
Birden fazla öğe eklemediğiniz sürece, ekleme davasında parens gerekmez. Ayrıca genellikle tırnaklara ihtiyaç duymaz. Eklemek için basit, kısa yol
Micah Elliott

1
@SuperUberDuper, neredeyse tüm unix kabuklarının, başlangıç ​​dosyalarını, etkileşimli olarak kabuğa yazmanızla hemen hemen aynı olan başlangıç ​​dosyalarını okuduğunu anlamalısınız. "Rc" dosyaları ile ilgili olarak size ilginç bir cevap bulabilir bu soruya
ony

6
Açık bir şekilde dışa aktarmaktan kaçınmak -xve bir değişkende yalnızca benzersiz değerler bırakmak mümkündür -U, varsayılan olarak iki nokta üst üste kabul edilir, bu yüzden:typeset -TUx PATH path
Keder

2
@DanielSpringer, hayır. Bu terimlerle istenirse: path=(...)(referans vermeden $pathveya $PATHiçeriden) atar, ekler path=(... $path)ve path+(...)ekler.
ony

40

PATHMinimal bir şekilde ekleyebilirsiniz . Birden fazla öğe eklemediğiniz sürece parantez gerekmez. Ayrıca genellikle tırnak işareti gerekmez. Eklemek için basit, kısa yol :

path+=/some/new/bin/dir

Genel kullanım

Daha sonra yeni bir komut dosyasını / yürütülebilir dosyayı test etmek için ortak desen:

path+=$PWD/.
# or
path+=$PWD/bin

Bu küçük harf sözdizimi pathbir dizi olarak kullanılır , ancak aynı zamanda büyük harf ortağı eşdeğerini de etkiler PATH(üzerinden "bağlı" typeset).

(Bildirim o hiçbir :ayırıcı olarak aranan / gereklidir .)

İlgili çerezler

Tedavisi path(bir dizi olarak) bu şekilde de anlamı: Bir yapmaya gerek rehash yeni pathed komutları almak için bulunacak.

Ayrıca vared pathdüzenlemepath ve diğer şeyler için dinamik bir yol olarak göz atın .

Yalnızca pathbu soru ile ilgilenebilirsiniz , ancak ihracat ve diziler hakkında konuştuğumuzdan, dizilerin genellikle dışa aktarılamayacağını unutmayın.

Yinelenen girişler almayı bile önleyebilirsinizPATH ( buna ve buna bakın ):

typeset -U path

'Yol + =: / foo / bar' olmamalı mı? (iki nokta üst üste ile)
andrew lorien

1
@andrewlorien Cevabı iki nokta üst üste ayırıcı hakkında ayrıntılarla güncelledim.
Micah Elliott

Yoldan sonra bir yorum varsa, o zaman alıntılara ihtiyacımız var path+='my/path' # for fun. Boşluklarınız varsa açıktır, ancak yorumlarınız çok fazla değildir.
Franklin Yu

"(Hayır: ayırıcı olarak gerekli / istenmediğine dikkat edin.)" Bu yalnızca küçük harf için geçerlidir path. Bir önceki :için gerekli olan PATH.zshrc dosyanızda aşağıdaki gibi, PATH+=:/Users/path/to/my/folder
Emmett R.

37

bir astar, ~/.zshrcdosya açılmadan

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

veya

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

Efekti görmek için source ~/.zshrcaynı sekmede yapın veya yeni bir sekme açın


1
Zsh kabuğu ile OSX üzerinde mükemmel çalıştı.
Stryker

1
Bir cazibe gibi çalıştı!
Akbar Sha Ebrahim

15
  1. ~ / .Zshrc yolu eklendi

    sudo vi ~/.zshrc

    yeni yol ekle

    export PATH="$PATH:[NEW_DIRECTORY]/bin"
  2. Güncelleme ~ / .zshrc

    Kaydet ~ / .zshrc

    source ~/.zshrc

  3. PATH'yi kontrol et

    echo $PATH


2
Bu Bashyol.
KuzenCocaine

13

SEÇENEK 1: Bu satırı ~ / .zshrc dizinine ekleyin:

export "PATH=$HOME/pear/bin:$PATH"

Bundan sonra source ~/.zshrcdeğişikliklerinizin etkili olması için çalıştırmanız gerekir VEYA bu pencereyi kapatın ve yeni bir pencere açın

SEÇENEK 2: Bu yolu yalnızca geçerli terminal penceresi oturumuna eklemek için terminal konsolunun içinde yürütün. Pencereyi / oturumu kapattığınızda kaybolacak.


Bu cevabın 5 yıl önce yayınlanan aynı cevaptan nasıl farklı olduğunu açıklayabilir misiniz ?
Franklin Yu

bu cevapta dosyaya bu kod satırını eklemeniz gerektiği söylenmez, eğer sadece mevcut pencerelerde değişecek şekilde çalıştırırsanız ve bu orijinal cevapta açıklanmaz
Dimitar
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.