.Bash_profile ve .bashrc arasındaki fark nedir?


245

OS X'te Terminal için bir takma ad oluşturmak için takma adı .bash_profileveya içine koyabilirsiniz .bashrc. İkisi arasındaki fark nedir ve neden diğerine takma isimlendirme koymayı seçeyim?


5
Buradaki unix bilgisini caydırmak değil, ancak saf bir UNIX canavarı olduğu için daha iyi bilgi edinebilir veya bu soruyu bir ortak sitede birkaç kez cevaplamış olabilirsiniz. Unix
bmike

Ayrıca .profile var ... Bu soruyu Stack Overflow'ta görün.
Yaakov Baruch

2
Eğer varsa brew install bashve iTerm2 kullanmak, sen ayarlayabilirsiniz profile -> commandiçin /usr/local/bin/bashyükleyecektir hangi .bashrcsonra varsayılan olarak .bash_profile. Bu aynı zamanda Bash 4 güzellikler verir ...
Ray Foss

.Bashrc'nin yıllardır kullanılmadığını ve varsayılan olarak çalışmadığını duydum ve .bash_profile macosx'teki şeydir. Ve denedim .bashrc ve t benim için işe yaramadı ama .bash_profile did
barlop

Yanıtlar:


247

.bash_profileoturum açma kabukları .bashrciçin yürütülürken, etkileşimli oturum açma olmayan kabukları için yürütülür.

Konsol üzerinden giriş yaptığınızda (kullanıcı adı ve şifre yazdığınızda), makinede otururken veya uzaktan ssh aracılığıyla uzaktan kumanda .bash_profileedildiğinde, kabuğunuzu ilk komut isteminden önce yapılandırmak için yürütülür.

Ancak, makinenize daha önce giriş yaptıysanız ve yeni bir terminal penceresi (xterm) açtıysanız .bashrc, pencere komut isteminden önce yürütülür. .bashrcAyrıca /bin/bashbir terminale yazarak yeni bir bash örneğini başlattığınızda da çalıştırılır .

OS X'te, Terminal varsayılan olarak her seferinde bir giriş kabuğu çalıştırır, bu nedenle diğer birçok sistemden biraz farklıdır, ancak bunu tercihlerinizde yapılandırabilirsiniz.


57
On OS X, Terminal by default runs a login shell every time- Bunu farketmeyerek her zaman kafam karıştı. Harika bilgi!
vaughan

1
@Alex, OS X terminali neden her zaman bir giriş kabuğu çalıştırıyor?
Pacerier

17
Çünkü bazı Apple dev aslında farkı fark etmedi ve şimdi bazı mumbo jumbolarla dolu.
Snowcrash

2
OS X'deyim ve bash yerine zshell, Terminal yerine iTerm kullanıyorum. Yanıttan bahsettiğimden farklı bir terminal ve farklı bir kabuk kullanmama rağmen, OS X hala her şeyi bir giriş kabuğu olarak görüyor gibi görünüyor, çünkü .zprofileher seferinde koştu.
Adam Zerner

1
Oturum açma / oturum açma ve etkileşimli / etkileşimli olmayan kabukların kombinasyonlarını ayrıntılı olarak açıklamak isteyenler ve bu yapılandırma dosyalarını çalıştırdıklarında, bkz. Unix.stackexchange.com/a/46856/38715
kevinmicke

45

X11 size .bashrc"normal" bir Terminal bakarken.bash_profile

Ancak, aşağıdakini eklerseniz, her şeyi iki yerine tek bir yerde birleştirmek için her şeyi dosyanızda .bash_profiletaşıyabilirsiniz .bashrc:

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

Ya da sadece yapabilirsin cd ~ ; ln -s .bashrc .bash_profile.
23’de

5
Bu 2 yapılandırma dosyası açıkça ayrı bir işleve sahiptir. Bazı durumlarda, oturum başlangıcında ve yalnızca orada başlatacak şeylerin olması gerekir ( ~/.bash_profile). Ayrıca her kabuk seviyesinde ( ~/.bashrc) artımlı olarak tanımlanacak şeylerin olması da sıklıkla gereklidir . Bu özgürlüğü bastırmayı önermek en iyi fikir değil.
dan

3
@danielAzuelos: Lurch bu bölümü dışarıda bıraktı, ancak OS X Terminal ~/.bash_profileher yeni pencere / sekme için kaynak ayırıyor, bu yüzden Terminal ile ilgili olarak ikisini ayırmanın bir yolu yok.
mipadi,

14
@mipadi Onları ayırmak için hala değer var. Örneğin, .bash_profileçocuk işleminde bir daha asla kaynaklanamaz. İç içe Bash kaynaklarının her seviyesi .bashrcgibi bir şey koyarsanız, bu nedenle export A=a:$Ade .bashrc, senin $Aiç içe Bash uzun alacak. Genelde profilde ortam değişkenini ve RC'de diğer isimleri bırakırım.
Franklin Yu

@ FranklinYu Birçok insan için bu kadar büyük bir anlaşma olmayabilir, ama kesinlikle katılıyorum! İnsanlara hatırlatmak ve daha fazla yükseltmeyi hak etmek harika bir teknik nokta.
Subfuzion

24

MacOS .bash_profileiçin her şeyi birleştirmek için girilen kod .bashrcşudur:

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

Bu Mac terminal kullanıcısı için daha spesifiktir.


6
Doğru olsa da, Lurch’un 2012’deki cevabından farkı ne ?
Arjan

0

TLDR; .bash_profiletakma adlarınız için kullanın .

Farklı başlatma dosyalarının birlikte çalışma şekli biraz daha karmaşıktır ve OSX'te bazı önemli özel durumlar vardır. İşte olayları:

  • Bash, herhangi bir platformda, nasıl çağrıldığına bağlı olarak birkaç farklı dosyadan birini yürütür. Detaylar burada .
  • OSX'in Terminal Uygulaması standart olmayan bir şey yapar: her yeni sekmeyi veya pencereyi bir giriş kabuğu gibi yaratır .bash_profile; Böylece yukarıdaki TLDR tavsiyesi.
  • .bashrcde bir seçenektir, ama bu (yani çağırmak bir altkabuk oluştururken her defasında adı verilecek bashbunun içinde bir değişkeni güncellemek eğer verimsizlik oluşturabileceğiniz,) (örneğin PATH=/bin/foo:$PATH)
  • Gömülü terminalleri olan diğer uygulamalar Terminal App'in kurallarını izlemeyi veya seçmemeyi seçebilir. Özellikle, Visual Studio Kodu, varsayılan olarak, yok .
  • GUI aracılığıyla çağrılan uygulamalar bir kabuktan doğmaz. Bu nedenle, yıllar içinde değişmiş olan çevre değişkenlerini görmeleri için ayarlayan çeşitli rekabet mekanizmaları vardır .
  • Çağrı Snippet'ler .bashrcgelen .bash_profileoldukça yaygındır. Bunu tavsiye etmiyorum, ama bu bir tercih.

Neden .bash_profiletakma adları kullanmak tam olarak karmaşık? Yalnızca kısmen listelediğiniz öğeler, takma adlar hakkındadır, bu yüzden neden karmaşık göründüğünü açıklayabilecek bazı madde imlerinin listelenmesi yerine, bu kısıtlamalar içinde daha kolay hale getirmenin bir yolunu önerebilir misiniz?
yokuş yukarı

Senin değinmek istediğin noktayı anlıyorum. Bu .bash_profile kullanarak karmaşık değildir. Dosyaların çağrılma şekli karmaşıktır. Güncelleyeceğim.
Leo

.Bash_profile'den .bashrc komutunun GNU bash el kitabında kullanılması önerilir - aksi halde hem oturum açma kabukları hem de etkileşimli olmayanlar için ihtiyacınız olan değişkenleri nasıl ayarlarsınız?
Mark

Farklı işletim sistemlerinde kullandığım her terminal emülatörü, yeni pencereleri bir giriş kabuğu olarak çalıştırma seçeneğine, xterm ve Xfce'ye yalnızca iki ad verme seçeneğine sahiptir.
fd0
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.