Neden .bashrc otomatik olarak çalışmıyor?


202

Dosyama bazı takma komutlar koydum .bashrc, böylece her yeni Terminal penceresini açtığımda yüklenebileceklerdi. Ancak bu olmaz.

Ben seçmek zorunda run script:Terminali> Tercihler> "in MyDefaultTheme "> Shell PrefPane ve ekleyin: source .bashrc && clearo iş için ...

Bu çok tuhaf görünüyor çünkü birçok ders sadece .bashrcdosyaya eklemek zorunda olduğunuzu söylüyor ve her şey yolunda.

bashTerminali kullanırken kaçmayacağımı , diğerini (varsayılan) birinden (ne olduğunu bilmiyorum) daha çok sevdiğime dikkat edin, çünkü bana her zaman nerede olduğumu gösterir, örneğin:

>>d54c6b47b:~ romeo$

onun yerine:

>>bash$

Bash'te her şey olması gerektiği gibi yüklenir.

Öyleyse sorum şu, dosyam neden .bashrcotomatik olarak yüklenmedi ve her seferinde onu seçme seçeneğini eklemek zorunda kaldım?

Ayrıca bazı eğitmen bana şöyle bir şey yapmamı söyledi:

$alias la=’ls -la >> ~/.bashrc

bu takma adı bana yazmalı .bashrc, bu da işe yaramıyor ...

UNIX acemi olduğumu unutmayın, bu yüzden nazik olun.



@ boehj iyi "yükleme .bashrc" diyor ama bu konuda.
Jari Keinänen

Tamam, buradaki şeyleri şaşırttıysam özür dilerim.
boehj

Muhtemelen cshdaha iyi (veya başka bir değişken) seversiniz. Ancak, >>bash$değişebileceğini
bilmelisin

Çalıştırmak komutları istiyorsanız onload oluşturmak .profileana dizininizde
Kolob Canyon

Yanıtlar:


94

Sadece .profiledosyayı ev dizininize koyun ve bir dahaki sefer yeni bir kabuk başlattığınızda ya da çalıştırdıktan sonra çalışması gerekir.source ~/.profile

Bu bağlantı, başlangıç ​​dosyalarının kabuk tarafından okunduğu ve yüklendiği sırayı açıkça belirtir: http://hayne.net/MacDev/Notes/unixFAQ.html#shellStartup


bunun bir çözümü olduğu için bunu kabul etti (ve iki özdeş mevkiin ilki idi).
romeovs

37
Aşağı oy kullandı. Bu tavsiyeye uymamanı tavsiye ederim. Mesele şu ki, Terminal giriş kabukları yaratıyor ve Bash giriş kabukları sadece giriş başlatma betiğini çalıştırıyor ~/.bashrc. Ancak, .bashrcbu iki dosya farklı kurulum türlerini gerçekleştirmek için tasarlandığından , çözüm içeriğinizi giriş yapmanın başlangıç ​​dosyasının içine yerleştirmek değildir . Bunun yerine, Bash için yapılan kurallı kurulum ~/.bash_profilekaynağınızı ~/.bashrckomut dosyasında uygun bir noktada bulundurmanızdır (genellikle sonuncu).
Chris Sayfa

Başka hiçbir özdeş yazı görmüyorum bu sadece sh dosyasına yazıyor diyor
Mark

218

Orada bulundum, yaptım. Ne farkettim, OS X .bashrcbash başlangıcında dosyayı okumuyor . Bunun yerine, aşağıdaki dosyaları okur (aşağıdaki sırayla):

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

Ayrıca Chris Johnsen'in bilgilendirici ve faydalı yorumuna da bakın:

Terminal , varsayılan /usr/bin/loginolarak kabuğu bir giriş kabuğuna dönüştüren kabuktan başlatır . Her platformda (sadece Mac OS X) bash kullanmaz .bashrcgiriş kabukları (sadece /etc/profileve ilk .bash_profile, .bash_login, .profileo var ve okunabilir). Bu yüzden " source ~/.bashrcsenin yerine koy .bash_profile" standart bir tavsiyedir.

Ben genellikle sadece normalde koymak görmediği şeyler koymak ~/.bashrciçin ~/.profile- şimdiye kadar bir cazibe gibi çalıştı.


38
Terminal , varsayılan /usr/bin/loginolarak kabuğu bir giriş kabuğuna dönüştüren kabuktan başlatır . Her platformda (sadece Mac OS X) bash kullanmaz .bashrcgiriş kabukları (sadece /etc/profileve ilk .bash_profile, .bash_login, .profileo var ve okunabilir). Bu yüzden “koymak olduğunu source ~/.bashrcsizin de .bash_profilestandart tavsiyedir”.
Chris Johnsen,

5
Re "Normalde ~ / .bashrc dosyasına ~ / .profile yazacağım şeyleri genellikle koyuyorum": En yüksek uyumluluk için Chris Johnsen'in tavsiyelerine uymanızı ve giriş yapmayan kabukları için uygulamak istediğiniz herhangi bir şeyi yerleştirmenizi tavsiye ederim. ~ / .bashrc ve giriş kabukları için çalıştırmak için ~ / .bash_profile "kaynak ~ / .bashrc" ekleyin. Aksi takdirde, alt kabuklar için veya Terminal oturum açma dışı kabuklar oluşturmak üzere değişirse veya varsayılan olarak oturum açma dışı kabuklar oluşturan xterm veya başka bir terminal programı kullanıyorsanız veya başka bir işletim sisteminde aynı kurulum.
Chris Sayfa

4
İlgili bir notta, Mac OS X'te global davranışları tespit etmek için ~ / .bashrc run / etc / bashrc komutunu kullanmalısınız. Özellikle, her dizinde çalışma dizinini güncellemek için / etc / bashrc kodu vardır; bu, Terminal'in proxy simgesini görüntülemesini, aynı dizinde yeni terminaller oluşturmasını ve Devam Et ve Pencere Grupları için çalışma dizinini geri yüklemesini sağlar.
Chris Sayfa

Benim için .bash_profile kaynağından .bashrc çalışmadı. Ancak .profile kaynağından .bashrc / .bash_profile kaynağını çalıştırdı.
Ken Russell,

2
Güzel cevap ama biraz yanlış bilgiler. Ben sadece bash terminali yükleri inanıyoruz biri arasında ~/.bash_profile, ~/.profile, ~/.bash_login, asla hepsi. 3 dosyayı oluşturarak basit bir test çalıştırabilirsiniz. Bash terminali arasında tercihini var gibi görünüyor ~/.bash_profile> ~/.bash_login> ~/.profile. Onlardan biri varsa, daha az tercih edilenler atlanır. Yani, ayrıca kaynak önerilir neden bazen var ~/.profileiçinde ~/.bash_profile.
nörit

25

Her şeyi içine koydum ~/.bashrcve sadece source ~/.bashrc.profile içine .

Bu, ekran ve xterm (ve sanırım tmux) oturumlarının, yalnızca oturum açma olmayan oturumlar çalıştığında ortamımı miras almasına izin .bashrcverirken, oturum açma oturumları (örn. Terminal veya iTerm) yalnızca çalışır .profile.


1
Bu benim yaklaşımım. Bu şekilde, her iki sistemde de çalışan bir .bashrc kullanabilirim ... ve .bash_profile dosyama sadece mac için özel olanları veya takma adlar gibi işleri (mac'ı en çok kullandığım yeri) koyabilirim.
Michael Durrant,

2
Bunun .profilebirkaç kabuk için ortak olduğunu ve yalnızca POSIX uyumlu sh kodu içermesi gerektiğini unutmayın . Kaynaklarsa .bashrc, tartışmaya açık bir şekilde Bash'e özgü kodlar içeriyorsa ( .bashrcdosyanın varlığı Bash'e özgüdür). Ben senin yeniden adlandırma tavsiye .profileTo .bash_profileBir Bash özgü bir şekilde kullanıyoruz beri. Ya da, jenerik kodu koymak .profileve bir oluşturmak .bash_profileolduğunu kaynaklar .profileve .bashrc.
Chris Sayfa

19

İki senaryo var:

  1. Linux kullanıyorsun
  2. Mac Os X kullanıyorsunuz

Her ikisi için de ~/.bashrc, terminaliniz için kabuğunuz başladığında, profilinize yüklenecek veya kaynaklanacak.


LINUX

Linux'ta, ~/.profilebaşladığında kabukta otomatik olarak kaynak yapılır. Böylece, terminalinize gidip yazdığınızda cd ~; ls -A, tüm dosyalarınızı ve dizinlerinizi giriş dizininizde ( /home/usrname/) göreceksiniz . Adlı bir dosya görmelisin .profile. Terminali başlattığınızda otomatik olarak "kaynaklı" olan dosya budur.

Takma ad ve işlevler eklemek istiyorsanız ~/.bashrc(yaptığım işte), o zaman (içinde boş olmayan bir dosya ~/.profileolup olmadığını kontrol eden bir if ifadesi ekleyip ~/.bashrckaynak yapın.

Bunu ~/.profilezaten yapıp yapmadığınızı kontrol etmek için nano ~/.profile. Bu, onu bir metin editöründe açacaktır (sizde olduğunu biliyorsanız gedit'i, nasıl kullanacağınızı biliyorsanız bile vim'i kullanabilirsiniz). Boş bir metin dosyası alabilirsiniz (olmamalısınız), ancak devam ederseniz basitçe. Bir çizgi görmüyorsanız yerde söylediği source ~/.bashrc, daha sonra bir yere aşağıdaki satırları girin (bir if deyimi ortasında sonunda veya başında değil gibi makul bir yere koyun):

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

Bu ~/.bashrc, boş olmayan bir dosya olup olmadığını (eğer ile [ -s ~/.bashrc ]) kontrol eder ve eğer öyleyse, onu kaynak yapar. Oldukça basit. Şimdi, herhangi bir geçerli takma ad, işlev, değişken vb ~/.bashrc. Ekleyebilirsiniz .


MAC OS X

Varsayılan olarak, Max OS X kaynakları ~/.bash_profile. Bir şeyler ekleyebilmek için ~/.bashrc(yine, yine de OS X'te yaptığım gibi), ardından linux ile aynı prosedürü uygularsınız. Terminalde girin cd ~; nano .bash_profile. Yazan bir satır source ~/.bashrcolup olmadığını kontrol edin ve orada değilse, if ifadesini yukarıdan ekleyin ( if [ -s ~/.bashrc ]; then source ~/.bashrc; fi).


NOTLAR

Bir if ifadesi yazarken, temelde her şey arasında boşluk bıraktığınızdan emin olun (örneğin if [ -s ~/.bashrc]; then echo "found"; fi, çalışmayan bir yer olmadığı için işe yaramaz ~/.bashrcve ]- tercüman bunun bir kelime olduğunu düşünecektir).

Eğer bir if ifadesinde durumları nasıl kontrol edeceğinizi öğrenmek istiyorsanız, terminale gidin ve girin man \[; bu aslında size bir if ifadesinin tükenmesini sağlar. Örneğin , bir dosya olup olmadığını ve buna göre stdout'a yazdırılıp yazdırılmadığını if [ -f /path/to/file ]; then echo "it's a file"; else echo "not a file"; fikontrol eder /path/to/file. Bunu her zaman göze çarpan kolay ve hızlı referans için de referans alırım: 7.2. Dosya testi operatörleri .

Umarım bu yardımcı olur. Tüm bunlara başladığımda ne kadar karıştığımı hatırlıyorum (çok uzun zaman önce değildi); öyleyse, gelecekteki UNIX çabalarınızda başarılar!


Linux üzerinde .profilekabuk bir giriş kabuğu ise sadece aksi takdirde kaynaklı .bashrckaynaklı
smac89

11

Sourcing .profile .bash_profile benim için yaptı

echo 'source ~/.profile' >> ~/.bash_profile

1
Kaynak .profile .bash_profile yapılması harika bir şey, ancak bu tek başına .bashrc'nin oturum açma kabukları tarafından çalıştırılmasına neden olmaz. .Profile öğeniz zaten bash dışında bir kabuk kullanırsanız sorunlara yol açabilecek .bashrc kaynağını almış olmalı. Çoğu Mac kullanıcısı asla yapmaz, ancak bazı nedenlerden dolayı yaparsanız, bunu unutmayın. :)
Terry N

@TerryN'nin söylediklerini genişletmek için: .bashrcsizden .bash_profiledeğil kaynaklardan emin olun .profile. .bash_profileBash'e özgüdür ve diğer ikisini de kaynaklamalıdır.
Chris Sayfa

6

Rvm (auto-installer, manuel düzenleme yok) kurduktan sonra ~/.bash_login, daha önce hiç sahip olmadığım bir dosya oluşturduğunu gördüm.

Ancak bu, ~/.profilekurulum ve takma adlarımın artık yüklenmediği anlamına geliyor ! Çok sayıda kısayol kayboldu. Sadece sırayla koştuklarını sanıyordum: - /

ekledim

. ~/.profile 

için ~/.bash_loginzincir şeyler beklediğim gibi.


+1, bu benim durumum. .Bash_login veya .bash_profile dosyasının .profile dosyasının çalışmasını engelleyeceğini öğrendim ... Neden bash'in bu kadar çok çelişen başlangıç ​​dosyasına sahip olma ihtiyacı duyduğunu bilmiyoruz.
RichVel

.profilebirkaç farklı kabukta ortaktır ve yalnızca POSIX uyumlu sh kodu içermelidir. .bash_profileBash'e özgüdür ve Bash'e özgü kod içerebilir. Genel olarak, Bash kullanıyorsanız .bash_profile, başlangıç ​​kodunuzun Bash'e bağlı herhangi bir şey içermediğinden emin olmadıkça tercih etmelisiniz . Ne tür bir program yaratılmış olursa olsun, .bash_loginmuhtemelen Bash'e özgü bir kod içerdiğinden, ancak .profilevarsa , kaynak kodunu içermesi gerekiyordu.
Chris Sayfa

3

Koymak ...

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

... içinde ~/.bashrcve sonra ~/.bashrcbenim kaynağımdaki kaynak ~/.bash_profile yüklü olan Terminal programında işe yaramadı.

Ama sonra açılan menüden Düzenle> Profil Tercihleri , Başlık ve Komut sekmesini açtım ve bu sayfanın komut bölümünden bir giriş kabuğu olarak Çalıştır komutunu seçtim .

Bunu yaptıktan sonra yeni bir terminal başlatmak, yazdığımda istenen sonucu gösterir.

 type rvm|head -1

yani "rvm bir fonksiyondur". Bu değişikliği yapana kadar bunu yapmadı ve sonrasında yaptığım tek değişiklik .bash_profileve .bashrcburadaki diğer cevaplarda açıklanan değişiklikler.


2

Her şeyden önce ~/.bashrc, ikinci bir kabuk çağrıldığında (örneğin, bir kabuk komut dosyası çalıştırırken) çalıştırılan ve ~/.profileher oturum açışında çağrılan dosyanın bu olduğunu söyleyeyim .

Bu nedenle . ~/.bashrc, ~/.profiledosyanıza komut yazmanızı tavsiye ederim ve bu komut her giriş yaptığınızda bashrc dosyasını çalıştıracak.


.profile giriş sırasında çalıştırıldığında otomatik olarak .bashrc dosyasını çalıştırır.
arun rana

bu yüzden .bashrc her
girişte

1
bashrc giriş yapılmayan kabuklar içindir. bash_profile / bash_login / profile / giriş kabukları için başka ne varsa. Bu, oturum açma kabuğunun ne olduğunu ve ne olmadığını içeren çok büyük bir çekişme kaynağıdır (örneğin bir ekran / tmux oturumu, masaüstü ortamındaki bir terminal vb.). Bu mutlaka "ikinci kabuk" değil. Bu bir kabuk giriş meselesi.
Jason Salaz,

3
Hiç Bash olmayan bir kabuk kullanırsanız, tarif ettiğiniz şeyi yapmak sorunlara neden olabilir. .profile tüm kabuklara uygulanır ve .bashrc diğer bazı kabukların anlamadığı bir dil içerebilir. .Profile yerine, yazdıklarınızı .bash_profile dosyasına koyun. (Ayrıca, ilk şeyi yapın .bash_profile "kaynak .profile" olur.)
Terry N

1

Uzak sunucuma rbenv (Digital Ocean) Ubuntu 16.04'ü yükledikten sonra da aynı sorunu yaşadım.

Her nasılsa yarattı ~/.bash_profile. ~/.bashrcOS X sisteminde aynı .

Ve Ubuntu sadece okumaya başladı ~/.bash_profile, fakat ~/.bashrcolması gerektiği gibi değil.

Bu yüzden verilerimi ~/.bash_profilebununla yedekledim :

mv ~/.bash_profile ~/.bash_profile.bak

Ve eski adını ~/.bashrcetmek~/.bash_profile

mv ~/.bashrc ~/.bash_profile

Benim için çalıştı. Ssh girişimden sonra herşeyi yükledim ~/.bashrc.


0

Bu başka birine yardım edebilirse diye ...

.bashrcDoğru kullanıcı için doğru dosyayı düzenlediğinizden emin olun . Vagrant kullanarak da benzer bir sorun yaşadım. Çalıştırdıktan sonra vagrant sshbenim .bashrcdosya çalıştırmak olmadığı. Çözüm, serserinin serser adlı kullanıcıyla giriş yaptığını ve aslında başka bir kullanıcı olarak giriş yaptığını düşündüğüm için basitti. Bu yüzden yanlış .bashrcdosyayı düzenliyordum . Doğru .bashrcdosyayı düzenledikten sonra takma isimlerim tanındı.


-1

Bu arada, eğer ZSH'yi etkinleştirdiyseniz, bash!

Yani tüm bu ~/.bashrcdosyalar yüklenmiyor.

Bunun ~/.zshrcyerine takma adlarınızı ayarlamanız gerekir .


-2

OSX tarzında girişiyle tutmak .profileve normal bash davranışını destekleyen .bashrcbir kullanabilirsiniz .bashrcsize simgesel bir bağlantı sağlayarak düzenli nix ve OSX arasında geçiş yaparsanız dosyayı .bashrcdenilen dosyada .bash_profile. Bu dosyayı denemeden önce var olmadığından emin olun, ancak bu nasıl yaparım.

ln -s .bashrc .bash_profile

Bu 2 değişik kabuk başlatma betiği arasındaki bağlantıyı yaparak, gerekli bir işlev ayrılmasını kaybedersiniz. Bir gün ya da bir başkası, oturum düzeyinde ( .bash_profile) ve her kabuk düzeyinde ( .bashrc) farklı bir ilklendirmeye ihtiyacınız olacak .
dan

-2

/ etc / bashrc, mac sistemlerindeki global profiller içindir. Ekleyebilirsiniz: alias ls = "ls -G" bu dosyanın üstüne ve iyiliğinizde, herkes sistemde renklendirilmiş dosya ve klasörlere sahip olacak, böylece her bir kullanıcı için ekstra bir şey ayarlamanıza gerek kalmayacak. Ayrıca kendinizden köken almak için "sudo su -" ile birlikte, fazladan baş ağrısı olmayan renklendirilmiş dosya ve klasörlere sahip olduğunuzu fark edeceksiniz.

Başka bir eğlenceli ipucu: mac'un Iterm2'sini kullanırken, renk profillerini içe aktarmak, bu "/ etc / bashrc" seçenek kümesini ayarladıktan sonra, renk profillerini içe aktarmak dosyaların ve klasörlerin renklerini derhal renk düzeninize göre oluşturur.

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.