Oturumu kapatıp tekrar açmadan .bashrc dosyasını nasıl yeniden yüklerim?


Yanıtlar:


2637

Sadece komutu girmelisiniz:

source ~/.bashrc

veya komutun daha kısa sürümünü kullanabilirsiniz:

. ~/.bashrc

88
Bu, giriş ve çıkış ile tam olarak aynı değildir. Diyelim ki .bashrc'de şu satıra sahipsiniz: export PATH=$PATH:foove sonra bunu değiştirin export PATH=$PATH:bar. Giriş ve çıkış destek vermesi halinde, sadece barPATH içinde olacak, ama ne önermek sen yoksa, hem foove barPATH içinde olacaktır. Bunun bir yolunu biliyor musun?
HighCommander4

7
@ HighCommander4 - ne istediğinizi yapmanın çok tatmin edici bir yolu "bash -l" yapmaktır, ancak bu aslında yeni bir alt kabuk oluşturur ve çıkış yaptığınızda "foo" nun hala PATH olduğu kapalı kabuğa dönersiniz. Sadece PATH ile ilgileniyorsanız, "unset PATH" yapabilir ve sıfırdan yeniden yapılandırabilirsiniz, ancak muhtemelen .bashrc'nizi almadan önce "PATH = / bin: / usr / bin" yapmaktır. PATH değişkeninin girişte nasıl oluşturulduğu, aslında en azından girişten (bkz. "Adam girişi") ve / etc / profilinden (bkz. "Man bash") girdi içeren makul derecede karmaşıktır.
George Hawkins

2
@Alex ~ / .bashrc ~ / .bash_profile satırına ekleyerek otomatikleştirebilirsiniz, ancak bunun iyi bir uygulama olup olmadığını bilmiyorum.
Vivek Gani

4
Ayrıca, .bashrc'yi açan ve editör çıktıktan sonra yeniden yükleyen bir takma ad (~ / .bashrc veya ~ / .bash_aliases içinde saklayabileceğiniz) oluşturmanızı da öneririm. Sen (Aksi başka bir şey dışarı takas, vim tercih editör ise) şöyle örneğin bir takma iki komutları birleştirerek yapabilirsiniz: alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Özel takma ad kullanılıyorsa, düzenlemeyi yaptıktan sonra yeniden yüklemeyi düşünmeniz gerekmediği için bu, düzenlemeyi daha pürüzsüz hale getirecektir.
Samuel Lampa

6
Bu etkiler sadece şimdiki terminali.
matepal297

283

Veya şunları kullanabilirsiniz:

exec bash

Bu aynı şeyi yapar ve hatırlanması daha kolaydır (en azından benim için).

execKomut tamamen belirtilen komut satırı çalıştırarak Kabuk işlemi yerine geçer. Örneğimizde, geçerli kabuk ne olursa olsun yeni bir örneğiyle bash(güncellenmiş yapılandırma dosyalarıyla) değiştirilir.


13
source .bashrcKomut farkını açıklar exec bashmısınız?
muradin

18
@muradin, sourceargüman olarak iletilen dosyanın içeriğini geçerli kabukta yürüten yerleşik bir kabuk komutudur . Örneğin, geçerli kabukta .bashrc dosyasını yürütür. Ve execkomut kabuğu belirli bir programla değiştirir, örneğin, kabuğunuzu bash ile değiştirir (güncellenmiş yapılandırma dosyalarıyla)
WhoSayIn

3
Hiper-spesifik durumumda bu tamamen sarsıldı. Dockerfile'm, .bashrc dosyasını değiştiren bir yükleme komut dosyası yürütüyor. Daha sonra yeniden yüklemek için buna ihtiyacım var, ama yerine . ~/.bashrcyürütecek , bu yüzden eksik bir hata var . Kabuktan bulunamadığından çözüm de yok. Bunu denedim ve docker görüntüsü sorunsuz bir şekilde inşa edildi! dashbashshoptsource
m59

9
Zarif, ama "aynı şeyi yapar" tamamen doğru değil. tüm kabuk ortamınızı source ~/.bashrckoruyacaktır (büyük olasılıkla kaynak kullanımı ile değiştirilmiş olsa da ), ancak yalnızca geçerli kabuğunuzun ortam değişkenlerini koruyacaktır (geçerli kabukta kabuk değişkenleri, işlev, seçenekler açısından geçici değişiklikler) kaybolacaktır. İhtiyaçlarınıza bağlı olarak, bir veya başka yaklaşım tercih edilebilir. ~/.bashrcexec bash
mklement0

12
@SEoF, "bash inception" dediğinde ve düşündüğünü düşündüğümü düşünüyorsan, yanlış olduğunu söylemeliyim. Filmden farklı olarak, tekrar tekrar bash'dan bash'a gitmeye devam etmiyorsunuz exec bash. execKomut değiştirir bizim durumumuzda, bash, program ile kabuk. Yani, terminalde her zaman bir tane bash örneği vardır.
John Red

121

To tamamlayacak ve kontrast en popüler iki cevapları, . ~/.bashrcveexec bash :

Her iki çözüm de etkili bir şekilde yeniden yüklenir ~/.bashrc, ancak farklılıklar vardır:

  • . ~/.bashrcya source ~/.bashrcedecektir korumak Mevcut kabuk :

    • Yeniden o değişiklikler dışında ~/.bashrcgeçerli kabuk haline ( kaynak ) yapar, cari kabuk ve devlet vardır korunmuş ortam değişkenleri, kabuk değişkenleri, kabuk seçenekleri, kabuk işlevleri ve komut geçmişini içeren,.
  • exec bashVeya, daha sağlam, exec "$BASH"[1] , edecektir yerine mevcut kabuk yeni bir örneği ile ve bu nedenle sadece geçerli kabuk korumak ortam değişkenleri (ad-hoc tanımladığınız olanlar dahil).

    • Başka bir deyişle: Kabuk değişkenleri, kabuk işlevleri, kabuk seçenekleri, komut geçmişi açısından geçerli kabukta yapılan geçici değişiklikler kaybolur.

İhtiyaçlarınıza bağlı olarak, bir veya başka yaklaşım tercih edilebilir.


[1] exec bash, daha önce 'de listelenen bir dizinde mevcutsa , teoride mevcut kabuğu başlatandan farklı bir bash yürütülebilir dosya yürütebilir $PATH. Özel değişken $BASHher zaman geçerli kabuğu başlatan yürütülebilir dosyanın tam yolunu içerdiğinden exec "$BASH", aynı yürütülebilir dosyayı kullanacağı garanti edilir .
Bir not yeniden "..."çevresinde $BASH: olduğu gibi değişken değeri Bash tarafından yorum yapmadan, kullanılmasını sağlar çift alıntı; değerin katıştırılmış boşlukları veya diğer kabuk metakarakterleri yoksa (bu durumda olası değildir), kesinlikle çift tırnaklara ihtiyacınız yoktur, ancak bunları kullanmak iyi bir alışkanlıktır.


Sormadan önce sorumu cevapladın. Bunu bilmek güzel; Sık sık CLASSPATH'ı tek bir seans için ayarladım.
swinefish

Peki ben exec "$ BASH" çağırsanız bile .bashrc set değişkenleri bir sonraki açacağım kabuk içinde bulunur (geçerli oturum aynı çalıştırılabilir kullanarak)?
nitinr708

3
@ nitinr708: Evet, exec $BASHkaynak olacak ~/.bashrc, böylece yeni oturumda kabuk ortamındaki değişikliklerini göreceksiniz.
mklement0

@ Gaming32, hiper bağlantılı bir dipnot fikrini takdir ediyorum, ama aslında işe yaramadı (ve bu kadar kısa bir cevapta, o kadar da önemli değil).
mklement0

44

Birisi cevabımı yanlış İngilizce eklemek için düzenledi, ancak burada kabul edilen cevaptan daha düşük olan orijinal vardı.

. .bashrc

25
Bu yalnızca geçerli dizininiz gerçekte ana dizininizse işe yarayacaktır. Aşağıdakiler işe yarayacaktır:. ~ / .bashrc
Brian Showalter

6
Bu işe yarayan nedir? Aslında ". .Bashrc" yaptığımda ne oluyor? Teşekkürler!
Jed Daniels 25'10

54
. "source" yerleşik komutu için bir BASH kısayolu. Yani ". .Bashrc", BASH yorumlayıcısının "kaynak .bashrc" ile aynıdır.
Brian Showalter

7
Güzel. Teşekkürler. Şimdi bilmiyordum.
Jed Daniels 25'10

2
Eklemek için bir düzenleme isteği gönderdim ~/, ancak en üstteki cevap her ikisini de gösterdiğinden source ~/.bashrcve . ~/.bashrcbu cevabın gereksiz olarak silinip silinmeyeceğini merak ediyorum.
Max Ghenis

18

Ortamınıza bağlı olarak, sadece yazarak

bash

de işe yarayabilir.


15
Bununla birlikte, bu, mevcut olan içinde yeni bir kabuk yaratacak ve böylece kaynakları israf edecektir. @ WhoSayln'ın geçerli kabuğu yeni çağrılan ile değiştiren exec çözümünü daha iyi kullanın .
Bernhard Wagner

evet sadece kaynağı kullan. Bu tamamen gereksiz ve sinir bozucu.
dylnmc

@ BernhardWagner'ın yorumuna ek olarak, yeni bir kabuk ortaya çıkarsa mevcut bash geçmişinizi de kaybedersiniz
peterchaula

Bu, kullanıcı ayrıcalık erişiminin sınırlı olduğu iyi bir çözümdür.
Tunde Pizzle

bir alt işlemin başlatılması, ek değeri olmayan bir karmaşıklık katmanı ekler.
Alan Berezin

18

Bu grubu, olmaz hatta yazmak zorunda "kaynak ~ / .bashrc":

Bashrc dosyanızı ekleyin:

alias rc="vim ~/.bashrc && source ~/.bashrc"

Bashrc'nizi her düzenlemek istediğinizde, yalnızca takma adı çalıştırın " rc "


15

2
exec bashhala mevcut kabuğun ortamını devralır. exec env -i bash(veya exec env -i bash -lşu anda bir giriş kabuğundaysanız) daha yakın olacaktır .
chepner

5

Ortamınıza bağlı olarak, bir SSH oturumunu açtığınızda .bashrc'nin otomatik olarak yüklenmesi için komut dosyası eklemek isteyebilirsiniz. Son zamanlarda Ubuntu çalıştıran bir sunucuya geçiş yaptım ve varsayılan olarak .bashrc veya .bash_profile değil .profile dosyası yüklenir. .Bashrc içinde herhangi bir komut dosyasını çalıştırmak için, source ~/.bashrcher oturum açıldığında çalıştırmak zorunda kaldım , bu da uzak dağıtımları çalıştırırken yardımcı olmaz.

Bir oturumu açarken .bashrc'nizin otomatik olarak yüklenmesini sağlamak için .profile dosyasına eklemeyi deneyin:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Oturumunuzu yeniden açtığınızda .bashrc dosyasında bulunan yolların / komut dosyalarının yüklenmesi gerekir.


Bu ".profile" var ama çalışmıyor - her çıkış, el ile yapmak zorunda. Herhangi bir öneri?
Wayne Smallman

4

Vultr bulut tabanlı sunucumu kurmak için easyengine kullandım.
Bash dosyamı adresinde buldum /etc/bash.bashrc.

Yani source /etc/bash.bashrcbenim için hile yaptı!

Güncelleme

Bir çıplak sunucu (ubuntu 16.04) kurarken, henüz bir kullanıcı adı ayarlamadıysanız ve root üzerinden giriş yaparken yukarıdaki bilgileri kullanabilirsiniz.

Bir kullanıcı (sudo yetkilerine sahip) oluşturmak ve bunun yerine bu kullanıcı adı olarak giriş yapmak en iyisidir.
Bu, ayarlarınız için .profile ve .bashrc dosyaları da dahil olmak üzere bir dizin oluşturur.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

Şimdi, düzenleyecek ve (ve "kaynak") ~/.bashrc .

Sunucumda, bu adresin bulunduğu yer /home/your_username/.bashrc
( your_usernameaslında yukarıda oluşturduğunuz yeni kullanıcı adı ve şimdi giriş yapın)


4

exec bash, akımı değiştirmek için yeni bir kabuk oluşturmak ve yeniden başlatmak için harika bir yoldur. sadece cevaba eklemek için, $ SHELL bash olan geçerli kabuğu döndürür. Aşağıdakileri kullanarak, yalnızca bash'a değil, geçerli kabuğu yeniden yükler.

exec $SHELL -l;


3

Benim için PATH'ı değiştirdiğimde ne işe yarıyor: exec "$BASH" --login


Sorusu yeniden ilgilidir ~/.bashrcki, --loginwill not (doğrudan) yeniden; kullanıcı düzeyinde, bunun yerine yeniden yüklenir ~/.bash_profile(veya ~/.bash_loginveya ~/.profile).
mklement0

3

yazın:

source ~/.bashrc

veya daha kısa formda:

. ~/.bashrc


1
Yine, yalnızca ana dizinde veya daha kesin olarak, bulunduğu dizinde .bashrcbulunuyorsanız çalışır. Bunu yapmanın daha doğru bir yolu, kabul edilen cevapta belirtildiği gibi source ~/.bashrc.
John Red

2

msysgit üzerinde aşağıdaki komutu kullanıyorum

. ~/.bashrc

daha kısa versiyonu

source ~/.bashrc

@jwg kabul edilen cevaptır. .bashrc. yalnızca msysgit üzerindeki giriş dizinindeyseniz çalışır.
Sojan V Jose

@jwg ok ince 'kaynak ~ / .bashrc' yazmak zorunda değilsiniz söz yerine daha kısa versiyonu kullanın.
Sojan V Jose

@jwg tamam orijinal cevaba düzenleme olarak ekledim :)
Sojan V Jose

Neden gereksiz cevap @Sojan?
nitinr708

@ nitinr708 2014. zar zor hatırlıyorum: S. orijinal cevap daha sonra sanırım bir şey düzenlendi.
Sojan V Jose

2

Etkileşimli bir kabuk varsayarsanız ve geçerli komut geçmişinizi korumak ve ayrıca / etc / profile (/ etc / bashrc dahil olmak üzere ortam verilerini yükleyen ve Mac OS X üzerinde /etc/paths.d/ adresinde tanımlanan yolları yükleyen path_helper) girin, komut geçmişinizi ekleyin ve login ('-l') seçeneğiyle bash yürütmesi yapın:

history -a && exec bash -l

1

Bu da işe yarayacak ..

cd ~
source .bashrc

7
Bunu yapar, ancak çalışma dizinini ~ olarak da değiştirir, bu da istenmez.
Albin

1
Bağlamı canlı tuttuğunuz için teşekkür ederiz @Krinkle
nitinr708

~Çalışma dizinini kullanıcı ana dizinine değiştirmeyi belirtmek gerekli mi?
Kenly

1

Saf exec bashkomutun ortam değişkenlerini koruyacağını fark ettim , bu yüzden kullanmanız gerekiyorexec -c bash bash'ı boş bir ortamda çalıştırmak .

Örneğin, bir bash giriş ve export A=1, eğer exec bash, A == 1.

Eğer exec -cl bash, Aboştur.

Bence bu işinizi yapmanın en iyi yolu.


-2

şahsen sahibim

alias ..='source ~/.bashrc'

benim bashrc, böylece sadece yeniden yüklemek için ".." kullanabilirsiniz.


4
Birçok kişi ..takma ad olarak kullanır cd .., bu yüzden çok kafa karıştırıcı olacaktır.
The Godfather

takma ad dışında iyi bir fikir. alias rehash='source ~/.bashrc'benim seçimim.
Frank Nocke

yeniden yükleme kabuğu olarak kullandığım "_rs" gibi bir şey kullanın. i takma adların başlangıcı için _ kullanın; hangi js libs underscorejs veya lodash benzer.
Jimmy MG Lim
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.