$ PATH değişken iddiaları zsh'de nereye yerleştirilir?


111

Seviyorum zsh, ama benim $PATHve diğer değişken iddialarımı nereye yerleştireceğimi bilmiyorum ? Dosyalar arasında dağılmış olduklarını .zshrc .zprofile .bashrc .bash_profileve bazen iki katına çıktıklarını görüyorum .

İçeride bir şey olması fark bashdosyalar kullanıyorum görerek çok mantıklı değil zsh, ama tam olarak nerede benim yerleştirerek gerektiğini rvm, python, nodekardeşime karşı vb eklemeler $PATH?

Ben (yani kullanarak olmalıdır Belirli bir dosya var mı .zshenvyok ki değil şu anda benim kurulumda mevcut), Şu anda kullanıyorum olanlardan biri, ya da hatta önemli?

Yanıtlar:


148

tl; dr sürümü: kullanım ~/.zshrc

Aşağıdakiler arasındaki farkları anlamak için man sayfasını okuyun :

~/.zshrc, ~/.zshenvVe ~/.zprofile.


Yorumumla ilgili olarak

Kev'in verdiği cevaba ekli yorumumda dedim ki:

Bu yanlış görünüyor - / etc / profile bulabildiğim hiçbir zsh belgesinde listelenmemiş.

Bu kısmen yanlış çıkıyor: kaynaklanıyor /etc/profile olabilirzsh . Ancak , bu yalnızca zsh" shveya olarak çağrıldığında" oluşur ksh; bu uyumluluk modlarında:

Olağan zsh başlatma / kapatma komut dosyaları çalıştırılmaz. Giriş kabukları source / etc / profile ve ardından $ HOME / .profile. ENV ortam değişkeni çağırmada ayarlanmışsa, $ ENV profil betiklerinden sonra kaynaklanır. ENV değeri, bir yol adı olarak yorumlanmadan önce parametre genişletmeye, komut ikamesine ve aritmetik genişletmeye tabi tutulur. [ man zshall, "Uyumluluk" ].

ArchWiki ZSH bağlantı diyor ki:

Oturum açma sırasında, Zsh aşağıdaki dosyaları bu sırayla sağlar:
/ etc / profile
Bu dosya, oturum açıldığında tüm Bourne uyumlu kabuklardan elde edilir

Bu implys /etc/profileedilir hep okumak tarafından zshGirişte - Ben Arch Linux projesi ile herhangi bir deneyimi yok; wiki bu dağıtım için doğru olabilir, ancak genellikle doğru değildir . Bilgi , zsh kılavuz sayfalarına kıyasla yanlış ve OS X'teki zsh için geçerli görünmüyor ( $PATHküme içindeki yollar, /etc/profilezsh oturumlarıma ulaşmaz).



Soruyu ele almak için:

rvm, python, düğüm vb. eklentilerimi $ PATH'ıma tam olarak nereye yerleştirmeliyim?

Genellikle, kızkardeşimi ihraç edeceklerini $PATHgelen ~/.zshrcancak bir okuma sahip 's değerinde zshall adam sayfasında, özellikle "başlatma / kapatma DOSYALAR" bölümü - ~/.zshrciçin okunan interaktif veya ihtiyaçlarınıza uygun olmayabilir kabukları, - İstersen $PATHiçin zshsizin tarafınızdan çağrılan her kabuk (hem hem interactivedeğil, hem de logindeğil, vb.), o zaman ~/.zshenvdaha iyi bir seçenektir.

Kullanmam gereken belirli bir dosya var mı (yani, şu anda kurulumumda bulunmayan .zshenv), şu anda kullandığımlardan biri mi yoksa önemli mi?

Başlangıçta okunan bir sürü dosya var (bağlantılı mansayfaları kontrol edin ) ve bunun bir nedeni var - her dosyanın kendine özgü bir yeri var (her kullanıcı için ayarlar, kullanıcıya özel ayarlar, oturum açma kabukları için ayarlar, her kabuk için ayarlar, vb).
Varolmama konusunda endişelenmeyin ~/.zshenv- ihtiyacınız varsa, yapın ve okunsun.

.bashrcve .bash_profileedilir değil tarafından okunan zshaçıkça onları kaynak sürece ~/.zshrcveya benzeri; arasındaki sözdizimi bashve zsholduğu değil her zaman uyumlu. Hem .bashrcve .bash_profileiçin tasarlanmış bashayarlar değil zshayarları.


3
Daha kapsamlı cevabın için teşekkürler simont. Bunu söylemen Garip .bashrcve .bash_profileokumaz zshben halen benim sahip olarak rvmyapılacak ilave $PATHiçinde .bashrcve benim pythonde eklenmesi .bash_profileve her iki gayet ekleniyor. Her durumda, tüm diğer yapılandırmalarım $PATHorada ~/.zshrcolduğu için tüm dışa aktarmalarımı konumuna taşıyacağım zsh. İtiraf etmeliyim ki farklı mermi türlerine pek aşina değilim. Gönderdiğiniz bağlantıları okurken, etkileşimli bir kabuk kullanıyorum, ancak emin olmak için daha fazlasını okuyacağım ... Tekrar teşekkürler!
stefmikhail

30

İşte, BAŞLANGIÇ / DOSYALARI KAPATMA bölümünün altındaki zsh man sayfalarından belgeler.

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

Bundan sipariş dosyalarının okunduğunu görebiliriz:

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

Buradan daha fazla bilgi edinebilirsiniz .


18

Benzer bir sorun yaşadım (bash terminal komutunda doğru çalışıyordu ancak zsh komutun hata bulamadığını gösterdi)

Çözüm:


daha önce ~ / .bashrc içine yapıştırdığınız şeyi yapıştırın:

~/.zshrc
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.