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

18

Kabuğum olarak zsh kullanıyorum ve çevremi yapılandırmaya çalışıyorum.

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

/etc/profile.d/java.sh

aşağıdaki içeriğe sahip

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

sonra oturumu kapatıp geri dönüyorum ve her şey çalışıyor, ancak bir sebepten dolayı PATH değişkeni ayarlanmadı. % Co_de% değerini, yeni JAVA_HOME değerini değil, bu terminal snippet'ini görüyor:

~  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 komutunu çalıştırmayı denedim.

~  java -version
zsh: command not found: java

PATH olması gerektiği gibi PATH içermiyor. kontrol etmem gereken başka bir şey var mı?

Eğer koşarsam şunu kontrol ettim:

source /etc/profile.d/java.sh

her şey düzgün çalışıyor ve değişkenlerim gerektiği gibi ayarlanıyor, ancak% co_de içindeki komut dosyaları otomatik olarak çalıştırılmıyor mu?

    
sordu Rodrigo Sasaki 03.06.2014 15:39

4 cevap

17

Benim bakış açımdan, en iyi yol aşağıdaki satırları ~/.zshrc dosyasına eklemektir (eğer zaten sahip değilseniz, o zaman yaratın):

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

Ardından, zsh 'yi yeniden başlatın veya source ~/.zshrc ' yi çalıştırın ve ardından PATH tam istediğiniz gibi olmalıdır.

Veya, değişikliğin sistem genelinde olmasını istiyorsanız, önceki kodu /etc/zsh/zshenv dosyasının sonuna ekleyin.

Ancak her durumda /etc/profile.d dizinindeki komut dosyalarını otomatik olarak çalıştırmak için zsh kullanmayın. Bu dizin, yalnızca bash kabuk için yararlıdır, sizin durumunuzdaki gibi zsh değil. Bunu anlamak için, bir bash başlangıç ​​dosyası < /etc/profile dosyasını açın. / a> ve hiçbir durumda bir zsh başlatma dosyası ve bir yerlerde göreceksiniz. dosyanın sonu:

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, /etc/profile.d dizinindeki komut dosyalarınız, önceki kodu zsh dosyasında, örneğin /etc/zsh/zprofile gibi bir zsh başlatma dosyasında eklerseniz veya /etc/profile dosyasında /etc/zsh/zprofile kaynağında ise otomatik olarak çalışır.

    
verilen cevap Radu Rădeanu 03.06.2014 23:12
2

Her şeyi .zshenv dosyasında yerleştirmenin hızlı bir şekilde yönetilmesini zor buluyorum. oh-my-sh 'yı yüklemenizi ve ardından .oh-my-sh/custom/ ' ye çeşitli özelleştirmeleri (env vars, işlevler) yerleştirmenizi öneririz. dizini ayrı .zsh dosyası olarak.

Ayrıca, PATH gibi env değişkenlerini değiştirirken makineye ssh'leme yaparken bu yaklaşımın kusursuz çalıştığını da keşfettim. Ayrıca, özelleştirmelerin yedeklenmesi ve senkronize edilmesi için vcsh ile birlikte gerçekten güzel çalışıyor.

    
verilen cevap dvim 26.06.2015 17:22
1

JAVA_HOME değeri ayarlandığından, bu komut dosyalarının otomatik olarak sağlandığını onayladınız, değil mi?

Tek mantıklı açıklama, PATH 'nin bir şekilde daha sonra ayarlanmasıdır. Başlangıçta /etc/environment okuyan PAM ile ve /etc/profile.d/*.sh dosyası alınmadan önce gerçekleştiğini bildiğim kadarıyla ayarlanmalıdır. Muhtemelen zsh bu konuda bash ile karşılaştırıldığında farklı çalışır.

    
verilen cevap Gunnar Hjalmarsson 03.06.2014 22:54
0

Güncellemeleri çalıştırdıktan sonra yerel olarak bu konuya yeni başladım. Kök sorunu gibi görünüyor Drush nerede pdo içeren bir php yasal bir kopyasını bulmak için bilmiyor. Neyse ki, bu değişkeni bir ortam değişkenine sığdırmayı destekliyor, bu yüzden bunu komut satırında yaptım:

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

Bu sorunu çözdüm. Bu yüzden .zshrc dosyasını düzenledim ve dosyayı ekledim, sorun çözüldü.

    
verilen cevap Allen Freeman 23.04.2015 18:50

Etiketlerdeki diğer soruları oku