.Bashrc, .bash_profile ve .environment arasındaki fark nedir?


130

Yılların bir dizi farklı * nix tabanlı sistemini kullandım ve kullandığım Bash'in her çeşidinin hangi başlangıç ​​komut dosyalarını çalıştıracağına karar vermek için farklı bir algoritması var gibi görünüyor. Ortam değişkenlerini ve takma adlarını ayarlamak ve başlangıç ​​mesajlarını (örneğin MOTD'ler) yazdırmak gibi görevler için, bunları yapmak için hangi başlangıç ​​betiği uygun yerdir?

Ne şeyler koyarak arasındaki fark .bashrc, .bash_profileve .environment? Ayrıca gibi diğer dosyaları gördüm .login, .bash_loginve .profile; bunlar hiç alakalı mı? Fiziksel olarak oturum açarken, ssh aracılığıyla uzaktan oturum açarken ve yeni bir terminal penceresi açarken çalıştırılanlar arasındaki farklar nelerdir? Platformlar arasında (Mac OS X (ve Terminal.app) ve Cygwin Bash dahil) önemli farklılıklar var mı?

Yanıtlar:


73

Kabuk yapılandırma dosyalarındaki temel fark, bazılarının yalnızca "oturum açma" kabukları tarafından okunmasıdır (örneğin, başka bir ana bilgisayardan oturum açtığınızda veya yerel bir unix makinesinin metin konsolunda oturum açtığınızda). bunlar, örneğin .loginveya .profileveya .zloginolarak adlandırılanlardır (hangi kabuğu kullandığınıza bağlı olarak).

Ardından, "etkileşimli" kabuklar tarafından okunan yapılandırma dosyalarınız var (olduğu gibi, bir terminale bağlı olanlar (veya bir pencereleme sistemi altında çalışan bir terminal öykünücüsü olması durumunda sözde terminal). Bunlar ada sahip olanlardır gibi .bashrc, .tcshrc, .zshrcvb

bashki bu zorlaştırmaktadır .bashrcedilir sadece ikisi olan bir kabuk tarafından okunan interaktif ve dışı giriş Eğer çoğu insan onların söylüyorum sonunda bulacaksınız bu yüzden, .bash_profileaynı zamanda okumak için .bashrcböyle bir şeyle

[[ -r ~/.bashrc ]] && . ~/.bashrc

Diğer kabuklar farklı davranır - örneğin zsh, .zshrcoturum açma olsun veya olmasın etkileşimli bir kabuk için her zaman okunur.

Bash kılavuz sayfası, her dosyanın hangi koşullar altında okunduğunu açıklar. Evet, davranış genellikle makineler arasında tutarlıdır.

.profilebasitçe, başlangıçta tarafından kullanılan oturum açma komut dosyası dosya adıdır /bin/sh. bash, genellikle geriye dönük olarak uyumlu olduğundan /bin/sh, .profilevarsa okuyacaktır .


48

Bu basit. Açıklanmaktadır man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

Oturum açma kabukları, oturum açtığınız bir kabukları okuyanlardır (bu nedenle, yalnızca xterm'i başlatırken çalıştırılmazlar). Giriş yapmanın başka yolları da var. Örneğin bir X görüntü yöneticisi kullanmak. Bunların, oturum açma sırasında ortam değişkenlerini okumak ve dışa aktarmak için başka yolları vardır.

Ayrıca INVOCATIONkılavuzdaki bölümü de okuyun . O diyor "Aşağıdaki paragraflar bash kendi başlatma dosyalarını nasıl çalıştırdığı açıklanmıştır." , bence bu bir nokta :) "Etkileşimli" kabuğun ne olduğunu da açıklıyor.

Bash'in bundan haberi yok .environment. Bunun, sürdüğünüz kabuktan bağımsız ortam değişkenlerini ayarlamak için dağıtımınızın bir dosyası olduğundan şüpheleniyorum.


1
/etc/bashrcCevabı tam doldurmak için ekleyebilir misiniz ?
Nemoden

9

Klasik olarak, ~/.profileBourne Shell tarafından kullanılır ve muhtemelen eski bir ölçü olarak Bash tarafından desteklenmektedir. Yine ~/.loginve ~/.cshrcC Shell tarafından kullanıldı - Bash'in bunları kullandığından hiç emin değilim.

~/.bash_profileGiriş sırasında, bir kez kullanılacaktır. ~/.bashrcKomut bir kabuk her başlatıldığında okunur. Bu, /.cshrcC Kabuğu ile benzerdir .

Bunun bir sonucu, ~/.bashrcgiriş yapılmayan bir kabuk başlatılırken ek yükü azaltmak için içeriğin mümkün olduğunca hafif (minimum) olması gerektiğidir.

İnanıyorum ~/.environmentDosyanın Korn Shell için bir uyumluluk dosyası .


7

Özetlemek için burada .bashrc ve .bash_profile hakkında bilgiler buldum :

.bash_profile oturum açtığınızda çalıştırılır. Oraya koyduğunuz şeyler, PATH'iniz ve diğer önemli ortam değişkenleri olabilir.

.bashrc, oturum açmayan kabuklar için kullanılır. Bunun ne anlama geldiğinden emin değilim. RedHat'ın başka bir kabuk başlattığınız her seferinde çalıştırdığını biliyorum (bu kullanıcıya su veya tekrar bash çağırma) Oraya takma adlar koymak isteyebilirsiniz, ancak yine de bunun ne anlama geldiğinden emin değilim. Ben kendim görmezden geliyorum.

.profile, kök için .bash_profile ile eşdeğerdir. Diğer kabukların da (csh, sh, tcsh) kullanmasına izin vermek için adın değiştirildiğini düşünüyorum. (kullanıcı olarak birine ihtiyacınız yok)

Bir de .bash_logout var, ki burada çalıştırılıyor, evet iyi tahmin ... çıkış yap. İblisleri durdurmak veya hatta biraz temizlik yapmak isteyebilirsiniz. Oturumu kapattığınızda ekranı temizlemek isterseniz oraya "temizle" de ekleyebilirsiniz.

Ayrıca yapılandırmaları dosyaların her biri tam bir izlem orada burada

Bunlar muhtemelen dağıtıma bağımlıdır, tüm dağıtımlar her yapılandırmayı kendileriyle yapmayı seçmez ve bazılarının daha fazlası vardır. Ancak aynı ada sahip olduklarında, genellikle aynı içeriği içerirler.


4

Josh Staiger'e göre , Mac OS X'in Terminal.app'i aslında her yeni terminal penceresi için oturum açma olmayan bir kabuk yerine bir oturum açma kabuğu çalıştırıyor ve .bashrc yerine .bash_profile'ı çağırıyor.

O öneriyor:

Çoğu zaman oturum açma ve oturum açma olmayan kabuklar için iki ayrı yapılandırma dosyası tutmak istemezsiniz - bir YOL belirlediğinizde, her ikisine de uygulanmasını istersiniz. .Bashrc dosyasını .bash_profile dosyanızdan kaynaklayarak, ardından PATH ve genel ayarları .bashrc içine koyarak bunu düzeltebilirsiniz.

Bunu yapmak için aşağıdaki satırları .bash_profile dosyasına ekleyin:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

Şimdi bir konsoldan makinenize giriş yaptığınızda .bashrc çağrılacaktır.


2

Bakmak için iyi bir yer bash'ın man sayfasıdır. İşte çevrimiçi bir versiyon. "DAVA" bölümünü arayın.


0

Yürütülüyor .profilegibi görünen ama olmayan Debian ailesi dağıtımlarını kullandım .bash_profile, oysa RHEL türevleri daha .bash_profileönce çalışıyor.profile .

Herhangi bir Linux işletim sisteminde çalışmak için ortam değişkenlerini ayarlamanız gerektiğinde bir karmaşa gibi görünüyor.

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.