Ortam değişkenlerini nerede bildirirsiniz?


59

Doğru yerler nelerdir:

  1. Global çevre değişkenleri tüm kullanıcıları etkilemek mi istiyor?
  2. Kullanıcıya özel ortam değişkenleri?

Yanıtlar:


16

2
Sorun, bağlantılı belgenin kullanıcı tarafından belirlenmiş değişkenler kısmında karıştırılması ve / veya yanlış olması. Hala bunu yapmak için kabuklu-agnostik bir yol bulmaya çalışıyorum. $ HOME / .profile muhtemelen en iyi bahis ...
Rmano

16
Lütfen metni yapıştırın veya bağlantılı içeriğin anlık görüntüsünü alın - gelecekte kullanılamayabilir!
Nam G VU

4
Bu soruyu teorik olarak cevaplayabilse de , cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak tercih edilir.
Thomas Ward

75

Sagarchalise'nin cevabına eklemek için, bağlantının ayarlar için uygun yerler olarak önerdiği şeyleri özetleyebilirim.

Genel ayarlar için, sistem genelinde ortam değişkenleri

  • kullanım /etc/environment
  • Kullanmayın /etc/profileveya/etc/bash.bashrc

Sayfadan:

/etc/environment[...] özellikle sistem çapında ortam değişken ayarları içindir. Bir komut dosyası değil, her satırda bir tane olmak üzere atama ifadelerinden oluşur. Özellikle, bu dosya sistem genelindeki yerel ayarları ve yol ayarlarını saklar.

Kullanımı /etc/profileçok Unix-y bir yol, ancak işlevselliği Ubuntu altında büyük ölçüde azalır. Yalnızca /etc/bash.bashrcgirişleri işaret etmek ve toplamak için vardır /etc/profile.d.

Benim sistemimde profile.d'deki tek ilginç giriş girişi /etc/profile.d/bash_completion.sh.

Yerel veya kullanıcı başına ayarlar için

Ubuntu sayfasının önceki bir sürümü önerilir ~/.pam_environment, ancak sayfa şu anda işe yaramazsa kullanmanız gerektiğini önerir.

  • ~/.profile - Bu muhtemelen ortam değişken atamalarını yerleştirmek için en iyi dosyadır, çünkü başlangıç ​​işlemi masaüstü oturumu sırasında DisplayManager tarafından ve metin konsolundan oturum açtığında oturum açma kabuğu tarafından otomatik olarak yürütüldüğü için en iyi dosyadır.

  • ~/.bash_profileveya ~./bash_login- Bunlardan biri varsa, bash ~/.profilebir giriş kabuğu olarak başlatıldığı zaman bash onu çalıştırır . Bash tercih ~/.bash_profileedecek ~/.bash_login. [...] Bu dosyalar varsayılan olarak grafiksel bir oturumu etkilemeyecek. "

  • ~/.bashrc - "... değişkenleri ayarlamak için en kolay yer olabilir".

1
Hangi programları /etc/environmentne zaman ve ne zaman okudunuz ? Kullanırken bile, cron ile çalışmak gibi görünmüyorSHELL=/bin/bash
SystemParadox

1
/ Etc / ortamının PAM'nin bir parçası olduğu anlaşılıyor, bu da tüm işlemler için varsayılan ortamı ayarlaması gerektiği anlamına geliyor. cron, özellikle bu ortamın kendisine ait olmak üzerine yazması konusunda özeldir (kırılmış).
SystemParadox

Peki .bashrc nasıl davranır? bash_profile'den sonra? yerine .profile?
18

1
@opensas Muhtemelen ayrı bir soru sormalısınız, buna ya da cevabı referans alarak.
belacqua

@belacqua Ben 2 veya daha fazla ortam değişkenleri eklemeniz gerekir diyelim /etc/environmentister JAVA_HOME="/opt/java" ve ANT_HOME="/opt/ant" nasıl yapılacağını
Kasun Siyambalapitiya

7

Sende:

/ etc / profile: Bourne kabuğu (sh (1)) ve Bourne uyumlu kabukları (bash (1), ksh (1), ash (1), ...) için sistem genelinde .profile dosyası.

Lucid ve Maverick’in içinde olan

/etc/profile.d/*.sh

varsa ve kullanıcının kabuğu bash ise:

/etc/bash.bashrc

Kullanıcı ortamı için, kabuğa özgü ve "giriş kabuğu" olarak kabul edilip edilmediği konusunda kafa karıştırıcı bir dizi vardır. Eğer kabuk bash ise:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

sh / dash için:

$HOME/.profile

zsh için, ben bile denemek için gitmiyorum bu anlam vermeye .


5

Https://help.ubuntu.com/community/EnvironmentVariables adresinde önerildiği gibi :

  1. Tüm kullanıcıları etkilemek isteyen küresel ortam değişkenleri girmeli /etc/environment.

  2. Kullanıcıya özel ortam değişkenleri ayarlanmalıdır ~/.pam_environment.

Ubuntu'da ortam değişkenlerini ayarlamak için profil ve rc dosyalarından kaçının. Bana değerlerinden daha fazla baş ağrısına neden oldular.

Bu, söylenenden daha kolay ancak;

Benim için var olan konfigürasyon boşluğuyla karşılaşmanız mümkündür. Aşağıdaki şifreli ana sayfa için geçici çözümü inceleyin.

Benim ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Neden çirkin statik yol? ${PATH}benim için işe yaramazdı. Girişimi birkaç kez buralarda çalışmayı denedim, ben de varsayılanların çirkin statik kopyasını yapıyorum :)

Şifreli Ev Klasörleri için Geçici Çözüm

Ubuntu'da Precise 12.04 Beta 2 sürümüne kadar olan sürümleri içerir, şifreli bir giriş dizini kullanıyorsanız /etc/pam.d/common-session, yüklemesini sağlamak için değiştirmeniz gerekecektir ~/.pam_environment. Bu çözüm görünüşte daha önceki sürümlerde işe yarar, ancak test etmedim.

Guenther Montag (g-montag) 2010-08-19 tarihinde yazdı:

Bu şifreli ev dizinleri ile ilgili bir sorun gibi görünüyor. ekledim

oturum gerekli pam_env.so

/etc/pam.d/common-session'ın sonunda ve şimdi ~ / .pam_environment okunur. Şifrelenmiş ev dizinleri olmayan başka bir sistemde (ayrıca 10.04), etrafta çalışmak gerekli değildir. Belki de benim durumumda sistem şifresini çözmeden önce ~ / .pam_environment okumaya çalışır.

Süper Kullanıcı cevabımdan uyarlanmıştır: https://superuser.com/a/408373/66856


Bu hala yanlış: ${HOME}ya işe yaramayacak. İçinde genişleme yoktur .pam_environment.
14'te

2
@detly genişleme var .pam_environment, ancak HOMEgenellikle bu kadar erken ayarlanmadı. Bu satır okumuş DEFAULT=${PATH}/Applications/jdkolsaydı, PATHeklenen değerin değerini görürdünüz.
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.