ZSH'yi kullandığımda PATH'i /etc/profile.d içinde nasıl ayarlarım?


22

Kabuğum olarak kullanıyorum zshve ortamımı yapılandırmaya çalışıyorum.

Genellikle $JAVA_HOMEdeğişkenimi bir dosya oluşturarak tanımlarım :

/etc/profile.d/java.sh

aşağıdaki içerikle

export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH

sonra oturumu kapatıp tekrar açtım ve hepsi işe yarıyor, ancak nedense PATHdeğişken ayarlanmadı. Bu terminal snippet'ini tanır JAVA_HOME, ancak PATHyenisini görmez:

~  echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_05
~  echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

ve jvm'den bir komut çalıştırmayı deneyerek onayladım.

~  java -version
zsh: command not found: java

PATHiçermez $JAVA_HOMEolması gerektiği gibi. kontrol etmem gereken başka bir şey var mı?

Eğer koşarsam kontrol ettim:

source /etc/profile.d/java.sh

her şey doğru çalışıyor ve değişkenlerim gerektiği gibi ayarlanıyor, ancak komut dosyalarının /etc/profile.dotomatik olarak çalışması gerekmez mi?


~/.profileBunun yerine değişkenleri düzenlemeyi ve yerleştirmeyi denediniz mi? PATHBaşka bir yerde bunun üzerine yazılmış olabilir /etc/profile.d/.
saiarcot895

Yanıtlar:


27

Benim bakış açıma göre, en iyi yol ~/.zshrcdosyaya şu satırları eklemektir (zaten yoksa, onu oluşturun):

if [ -d "/path/to/jdk" ] ; then
    export PATH="/path/to/jdk/bin:$PATH"
fi

Sonra yeniden başlatın zsh, ya da sadece koşun source ~/.zshrcve sonra PATH'iniz istediğiniz gibi olmalıdır.

Veya değişikliği sistem genelinde yapmak istiyorsanız, önceki kodu /etc/zsh/zshenvdosyanın sonuna ekleyin .

Ancak, hiçbir durumda /etc/profile.dkomut dosyalarını otomatik olarak çalıştırmak için kullanmayın zsh. Bu dizin sizin durumunuzda bashdeğil, sadece kabuk için kullanışlıdır zsh. Bunu anlamak için /etc/profile, bir bash başlatma dosyası ve hiçbir durumda bir zsh başlatma dosyası olmayan dosyayı açın ve dosyanın sonunda bir yerde göreceksiniz:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Yani, sizin komut /etc/profile.ddizininde otomatik olarak çalışır zshsen gibi bir zsh başlatma dosyasında önceki kod eklerseniz sadece /etc/zsh/zprofileörneğin veya kaynak /etc/profileiçinde /etc/zsh/zprofiledosyanın.


4
Belki ~/.zprofilede daha iyi olabilir ~/.zshrc.
muru

3

Her şeyi tek bir .zshenvdosyaya yerleştirmenin hızlıca yönetilmesi zorlaşıyor. Oh-my-sh komutunu kurmanızı ve ardından çeşitli özelleştirmeleri (env vars, fonksionları) .oh-my-sh/custom/dizine ayrı .zshdosyalar olarak yerleştirmenizi öneririm .

Ayrıca bu yaklaşımın, gibi env değişkenlerini değiştirirken makineye girerken kusursuz çalıştığını da keşfettim PATH. Ayrıca, özelleştirmeleri yedeklemenizi ve senkronize etmenizi sağlamak için vcsh ile birlikte gerçekten iyi çalışır .


Zsh çerçevemi kullanarak, ssh erişimi için kullanmak üzere bir ip adresi (uzak sunucu) olan bir değişkeni nereye koyacaksınız? Git için ip ve sunucuya bir giriş betiği ihtiyacım var.
Timo

1
Hm. Ne demek istediğinden emin değilsin. Ssh için ip adresleri ve kullanıcı adları gibi config'i koyacağım~/.ssh/config
dvim

Ben şahsen bu yaklaşımı vcsh kullanmanın avantajını sevdiğim için kabul ediyorum cevabını tercih ediyorum ve ZSH için "custom" klasörü bu gibi şeyler için ideal bir yer.
Erick Brown

1

Ayarlandığından beri JAVA_HOME, bu komut dosyalarının otomatik olarak kaynaklandığını onayladınız, değil mi?

Mantıklı tek açıklama, bir PATHşekilde daha sonra ayarlanmış olmasıdır. Orijinal olarak PAM tarafından ayarlanmalı /etc/environmentve /etc/profile.d/*.shdosyalar kaynaklanmadan önce bunun gerçekleştiğini bildiğim kadarıyla ayarlanmalı . Muhtemelen zsh, bu konuda bash ile karşılaştırıldığında farklı çalışır.


0

Sadece güncellemeleri çalıştırdıktan sonra yerel olarak bu sorunla karşılaştım. Kök meselesi gibi görünüyor Drush pdo içeren php okunaklı bir kopyasını nerede bulacağını bilmiyor. Neyse ki bu yolu ortam değişkeninde saklamayı destekliyor, bu yüzden komut satırında yaptım:

export DRUSH_PHP="/Applications/MAMP/bin/php/php5.4.39/bin/php"

Bu sorunu düzeltti, bu yüzden .zshrc dosyasını düzenledim ve dosyaya ekledik, sorun çözüldü.


1
Öyleyse, .zshrcbunun en iyi cevapla aynı şekilde kullanılmasını öneriyorsun ?
muru
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.