Bir terminali açarken neden ~ / .bash_profile kaynaklanmadı?


175

Sorun

Bir Ubuntu 11.04 Sanal Makinem var ve Java geliştirme ortamımı kurmak istedim. Aşağıdaki gibi yaptım

  1. sudo apt-get install openjdk-6-jdk
  2. ~ / .Bash_profile dosyasına şu girişler eklendi

    export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
    
    export PATH=$PATH:$JAVA_HOME/bin
  3. Değişiklikleri kaydedin ve çıkın

  4. Tekrar bir terminal aç ve aşağıdakileri yaz.

    echo $JAVA_HOME   (blank)
    echo $PATH        (displayed, but not the JAVA_HOME value)
  5. JAVA_HOME'un ihracatı ve PATH'in eklenmesi hiç yapılmamış gibi bir şey olmadı.

Çözüm

~ / .Bashrc dosyasına gidip dosyanın sonuna doğru aşağıdaki girişi eklemek zorunda kaldım

#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile

Sorular

  1. Bunu neden yapmak zorunda kaldım? Bash_profile, bash_login veya profil yokken bu iki kişinin bashrc'den önce idam edildiğini düşündüm.
  2. Bu durumda terminalim giriş yapılmayan bir kabuk muydu?
  3. Öyleyse, neden terminalden sonra su yaparken ve parolayı koyarken yukarıda belirtilen ihracatı belirlediğim profili uygulamamıştır?

Yanıtlar:


224

~/.bash_profileetkileşimli giriş modunda başlatıldığında yalnızca bash tarafından kaynaklanır. Bu genellikle, yalnızca konsola giriş yaptığınızda ( Ctrl+ Alt+ F1.. F6) veya ssh ile bağlanırken olur.

Grafik olarak giriş yaptığınızda, ~/.profileözellikle gnome-oturumu başlatan komut dosyası (veya kullandığınız masaüstü ortamı) tarafından kaynaklanır. Yani ~/.bash_profilegrafiksel olarak giriş yaptığınızda hiç kaynaklanmadı.

Bir terminal açtığınızda, terminal (giriş yapılmayan) etkileşimli modda bash'ı başlatır, bu kaynak olacaktır ~/.bashrc.

Bu ortam değişkenlerini koymanız için doğru yer içeridedir ~/.profileve etki bir sonraki oturum açışınızda belirgin olmalıdır.

Kaynak ~/.bash_profilegelen ~/.bashrcyanlış bir çözümdür. Bunun tersi olması gerekiyordu; ~/.bash_profilekaynak olmalı ~/.bashrc.

Bunun neden olduğu gibi bazı tarihler de dahil olmak üzere daha ayrıntılı bir açıklama için DotFiles'a bakın .

(Bir yandan not, aptjdk'yi apt aracılığıyla kurarken, paketler tarafından sembolik bağlantılar kurulmalıdır, böylece gerçekten ayarlamanıza JAVA_HOMEveya değiştirmenize gerek kalmaz PATH)


6
Ubuntu 12'deki kenar çubuğundan bir Terminal açarken ~ / .profile dosyasının yüklenmediğini öğrendim.
jcollum

3
@jcollum Bu iyi. .profilesadece giriş yaptığınızda kaynak gösterilmelidir.
geirha 30:13

2
oh, bir terminal açmak, giriş yapmakla aynı şey değildir ... terminale giriş yapmayı düşünüyordum .
jcollum

2
.profileVarsa, bash tarafından yoksayılan aklınızda bulundurun .bash_profile. Cevabımı burada ve man bashdaha fazla ayrıntı için görün .
terdon

3
@terdon, evet, fakat grafiksel olarak oturum açarken bash katılmaz, bu nedenle doğrudan gider .profile.
geirha

48

Bash kabuğunuzun aşağıdakileri yaparak bir giriş kabuğu olarak başlatılıp başlatılmadığını kontrol edebilirsiniz:

shopt login_shell

Cevap ise offbir giriş kabuğu çalıştırmıyorsunuzdur.

Bash'in farklı yapılandırma dosyalarını nasıl okuduğu (ya da okumadığı) hakkındaki Bash kılavuzunun başlatma bölümünü okuyun.

Şundan alıntı man bash:

Bash etkileşimli bir giriş kabuğu veya --login seçenekle etkileşimli olmayan bir kabuk olarak çağrıldığında , ilk önce dosyadan komutları okur ve yürütür /etc/profile, eğer o dosya varsa. Bu dosyayı okuduktan sonra, arar ~/.bash_profile, ~/.bash_loginve ~/.profile, bu sırayla ve okur ve var ve okunabilir olanlarını komutlarını çalıştırır.

suÖte yandan, varsayılan olarak bir giriş kabuğu başlatmaz, bunu --loginseçeneğini kullanarak bunu söylemeniz gerekir .


9
Shotp login_shell komutu için çok teşekkürler . Korku veren !!
Viriato

27

Profil tercihlerini düzenleyerek bir giriş kabuğu (örn. Bash -l) kullanmak için gnome-terminalin varsayılanını değiştirebileceğinizi söylemeye değer olduğunu düşünüyorum.

Düzenle -> Profil Tercihleri ​​-> Başlık ve Komut sekmesine gidin "Komutu bir giriş kabuğu olarak çalıştır" seçeneğini işaretleyin.


1
Bu ayarı etkinleştirmenin olumsuz yanları nelerdir?
chrish

2
@chris sadece birçok durumda gerektiğinden biraz daha fazla kod yüklüyorsunuz. Muhtemelen ~/.bash_profilehızlı bir şekilde değerlendirmenizin bir önemi yok , muhtemelen durum bu. Kontrol edilmesi iyi bir şey, genellikle oldukça maliyetli olan diğer işlemlere yapılan çağrıları takip etmektir.
vaab

14

Bir terminal açarsanız veya çalıştırırsanız su, kabuk bir giriş kabuğu olarak değil normal bir etkileşimli kabuk olarak yürütülür. Bu yüzden okur ~/.bashrcama değil ~/.bash_profile. Kaçabilirsiniz suile -lbir giriş kabuğu olarak kabuk çalışır hale getirmek seçeneği.

Bir GUI ile çalıştığınızda, kabuk genellikle bir giriş kabuğu olarak çalıştırılmaz, bu yüzden tüm yout'ları koymak genellikle iyidir ~/.bashrc.


1
Yaptığım şey buydu ve işe yaradı, ama alt kısımdaki adamın ne dediğini kontrol edin, bunun bashrc'ye koymak ve onun yerine profile koymak için kötü bir fikir olduğunu öne sürdü. .... Hey iki yönlü de çalışır, çok teşekkürler.
Viriato

4

TL; DR

Klasik önerilen ubuntu kurulumunda, ~/.bash_profileyalnızca belirli durumlarda değerlendirilir. Ve mantıklı.

Eşyalarını koymak, ~/.bashrcher zaman değerlendirilecektir.

Tamam, anlamak istiyorum, bu neden mantıklı?

Neler olup bittiğini anlamak için önemli noktalar:

  • Linux üzerindeki tüm işlemler ortam değişkenlerine sahiptir ve bunları kullanır.
  • çevre değişkenleri miras alınır
  • bu yüzden onları bir kez tüm sürecinizin babasına koymak yeterlidir (özellikle de hesaplama süresi gerektiriyorsa).
  • Tüm işleminizin babası genellikle cihazınıza giriş yaptıktan sonra başlatılır (kimlik bilgilerinizi verin).
  • bilgisayarınızda oturum açtığınızda yalnızca bir kez yapmak isteyebileceğiniz şeyler olabilir (örneğin, yeni postaları kontrol edin ...).

Yani "giriş" süresi genellikle:

  • Konsol kipinde, giriş yaptığınızda (Ctrl-Alt F1 ile) veya üzerinden geçtiğinizde ssh, kabuk tüm işlemlerin babası olacağı için, yükler ~/.bash_profile.
  • Grafik modunda, oturumunuzu açtığınızda, ilk işlemi ( gnome-sessionklasik ubuntu için) okumakla sorumlu olacaksınız
    .profile.

Tamam, eşyalarımı nereye koyayım?

Oldukça karmaşık, tam hikaye burada . Ancak burada ubuntu kullanıcıları için oldukça yaygın olan bir sorun var. Bu nedenle:

  • bashkabuk kullanıyorsun
  • Eğer bir var ~/.bash_profileve izleyin tavsiye yüklenmesini eklemek ~/.bashrciçinde senin ~/.bash_profileen azından tanıtılması amacıyla çağırma mecanism ne olursa olsun değerlendirilir alır bir dosya .

Bu, eşyaların nereye yerleştirileceğine dair hızlı bir öneridir.

  • ~ / .bashrc (Tavsiyeye uyduğunuz sürece her durumda değerlendirilir )

    İçin hızlı değerlendirme sizin için ortam değişkeni ve kod kullanıcı sadece ve bash okunur komut satırı kullanımı (örneğin takma ad). faşizm açıktır.

    Üzerine yüklenir:

    • grafiksel oturumlarda yeni bir kabuk penceresi / bölmesi yapın.
    • çağrı bash
    • screenyeni bölme veya sekme. (değil tmux!)
    • Herhangi bir bash örneği grafik konsolu istemcisindeki ( terminator/ gnome-terminal...) eğer "login komutu olarak çalıştır komutu" seçeneğini işaretlemezseniz .

    Ve önceki öneri sayesinde tüm diğer durumlarda yüklenir.

  • ~ / .bash_profile ( Yalnızca belirli durumlarda değerlendirilir )

    İçin yavaş değerlendirme sizin için ortam değişkeni ve kod yalnızca kullanıcı ve konsol oturumu süreçler. faşizm açıktır. Yüklendi:

    • Konsol girişi (Ctrl-Alt F1),
    • ssh bu makineye giriş yapıyor,
    • tmuxyeni bölme veya pencereler (varsayılan ayarlar), (değil screen!)
    • açıkça yapılan çağrılar bash -l,
    • Bir grafik konsol istemcisindeki herhangi bir bash örneği ( terminator/ gnome-terminal...), yalnızca "login komutu olarak giriş komutu çalıştır" seçeneğini işaretlerseniz.
  • ~ / .profile (Yalnızca grafiksel oturumda değerlendirilir)

    İçin yavaş değerlendirme ortam değişkenleri ile no-bashism sizin için yalnızca bir kullanıcı ve tüm grafik oturumlu süreçler. Grafik kullanıcı arayüzünüze giriş yaptıktan sonra yüklenir.


Bash bir profil dosyası yüklemediği .profiledurumlarda .bash_profile, yoksa yüklenir .
muru

Net bir açıklama için çok teşekkür ederim. Benim gibi yenidoğanlara yardımcı olur. Mac Mojave'de, eğer değişkenleri ~ / .bashrc'ye koyar ve kaynak yaparsam ve sonra bunu envyaparsam env değişkenlerini ayarlı göremiyorum (iTerm'i kapatıp yeniden açmayı denedim). Ama Android stüdyosu ve diğer uygulamaları kurduğumda, tüm bu ortamların yerleştirildiğini fark ettim /.bash_profile. Bu yüzden eklediğimde /.bash_profileçekicilik gibi çalıştı. Neden?
sofs1
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.