.Bashrc amacı nedir ve nasıl çalışır?


Yanıtlar:


131

.bashrcEtkileşimli olarak başlatıldığında Bash'in çalıştırdığı bir kabuk betiğidir . Etkileşimli bir kabuk oturumu başlatır. Herhangi bir komutu komut istemine yazabileceğiniz dosyaya koyabilirsiniz.

Kabuğu kendi ortamınızda kullanmak için ayarlamak veya tercihlerinize göre şeyler özelleştirmek için buraya komutları koyarsınız. Yaygın bir şey koymak için .bashrcolan diğer adlar her zaman kullanılabilir olmasını istiyoruz.

.bashrcHer etkileşimli kabuk başlatmasında çalışır . Eğer öyle diyorsan:

$ bash ; bash ; bash

ve sonra Ctrl-Düç kez vurmak, üç kez .bashrckoşacak. Ama bunun yerine bunu söylerseniz:

$ bash -c exit ; bash -c exit ; bash -c exit

o .bashrczaman hiç yayınlanmayacak, çünkü -cBash çağrısı etkileşimli değil. Aynı bir dosyadan bir kabuk betiği çalıştırdığınızda geçerlidir.

Kontrast .bash_profileve .profilehangileri yalnızca yeni bir giriş kabuğunun başlangıcında çalıştırılır? ( bash -l) Bir komutun , bir kez mi çalışacağına veya her etkileşimli kabuk başlangıcında mı çalışacağına bağlı olarak mı .bashrcgirileceğini seçersiniz .bash_profile.

Ben koymak tercih takma adları, bir karşı örnek olarak .bashrc, yapmak istediğiniz PATHayarlamaları .bash_profilebu değişiklikler genellikle olmadığından, yerine İdempotent :

export PATH="$PATH:/some/addition"

.bashrcBunun yerine koyarsanız, etkileşimli bir alt kabuğu her başlattığınızda, bir komutu yanlış yazdığınızda kabuk için ekstra çalışma yaratarak tekrar :/some/additionsonuna kadar PATHbağlanır.

Eğer her yeni bir interaktif Bash kabuk olsun dışarı kabukvi ile :shörneğin.


6
Minör kelime oyunu: bash vermez diğer çoğu kabukları aksine değil otomatik örnek başına yapılandırma dosyasını yüklemek .bashrcbir giriş kabuğu olarak başlamış zaman. Bu bazen beklenmeyen davranışlara yol açabilir . Her zamanki geçici çözüm kaynak olduğu .bashrcgelen .profileveya .bash_profileyerine.
Ilmari Karonen

@IlmariKaronen .bashrcDiğer mermiler tarafından kullanılması amaçlanmadığından, diğer mermiler .profiletarafından kullanılamaz bash.
chepner

@IlmariKaronen ne olur (okuyun: nasıl debug neden) ne zaman source ~/.bashrcveya . ~/.bashrcveya [[ -f ~/.bashrc ]] && source. ~/.bashrcveya [ -f ~/.bashrc ] && source ~/.bashrcçalışmaz?
Nikos Alexandris

@ NikosAlexandris: Bu ayrı bir soru. Lütfen ayrı olarak sorunuz .
Warren Young,

@WarrenYoung Yapardım ama .bashrcbunun gerçekten kaynaklandığını anladım ( superuser.com/a/183980/128768 adresinden tavsiye edilen komutu kullanarak ). Ben yüz sorun aslında değil kaynak olduğunu https://github.com/junegunn/fzfiçinde bu komutu ile .bashrc: source ~/.fzf.bash. Yeni bir terminal başlattım, sonra Ctrl+ Rve alıyorum `__fzf_history__`bash: fzf: command not found. El .bashrcile kaynak ve aynı anahtar kısayolu beklendiği gibi fzf başlattı. Buradaki gürültü için özür dilerim.
Nikos Alexandris

20

Bir .bashrcdosyanın amacı değişkenleri, işlevleri ve takma adları ayarlayabileceğiniz, (PS1) komut isteminizi tanımlayabileceğiniz ve yeni bir terminal penceresi açtığınızda her başlatmak için kullanmak istediğiniz diğer ayarları tanımlayabileceğiniz bir yer sağlamaktır.

Her yeni bir terminal, pencere veya pencere açtığınızda çalıştırılarak çalışır.

Burada benimkini görebilirsiniz (sözdizimi vurgulu resim) :

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

Açıklama:

-1. Geçmiş dosyamı yinelemeleri yoksayacak ve varsayılandan daha büyük olacak şekilde ayarlayın.
-2. lsLinux veya OSX
-3 kullanıp kullanmadığınıza bağlı olarak renk seçeneği . Fonksiyonu " md" yapmak ve
-4 tek komutla bir dizine cd . Bir git repo ve ...
-5 ise mevcut git şubesini bulun . -9. <code> 20:00:43 durrantm Castle2012 / hom / durrantm / Dropnot / _ / rails_apps / bağlayıcı yöneticisi \ n $ _ </code>
-10'da olduğu gibi harika bir PS1 istemi tanımlayın . Geliştirilmiş PS2 istemi
-11.
Vi'yi -12 komut satırında editör olarak ayarlayın .
Vi'yi varsayılan düzenleyici -13 olarak ayarlayın . -14 .bash_aliasesvarsa, dosyamı çalıştır
. Varsa git sekmesi tamamlama komut dosyasını (uzaktan kumandalar ve dallar için) yürütün.
-15.
-16 varsa otomatik atlama işlemini yürütün . Bash sürümü> = 4 ise, cd bölümünü yazmadan cd'ing yapılmasına izin verin.
-17.
-18 varsa, bir bash tamamlama komut dosyasını yürütün .
-19 varsa TMUX kullanın . PATH -20'ime rvm ekle
. Varsa rvm kullanın.

Özelleştirmeden linux veya OSX makinelerimden herhangi biri üzerinde çalışabilmesi için bu portatif bilgisayarı yaptım - bu nedenle, bazı işlevler ve diğer komut dosyalarını kullanmadan önce varlığı test etmek için bazı testler yapıldı.

Bu aynı zamanda, yeni bir terminal penceresi açılmasını etkileyen herhangi bir sorun yaşamadan, dosyanın tamamını yeni bir makinede hemen kullanmayı kolaylaştırır.


Overkill ... ͏͏͏͏͏͏͏͏͏
Pacerier

ha? senin için çok mu yardımcı?
Michael Durrant

2
Paylaştığınız için çok teşekkür ederim. Burada bir bilgi hazinesi.
Vic,

7

Bir bashyapılandırma dosyasıdır.

Etkileşimli (oturum açmayan) kabukları, ardından config bu dosyalardan okunur:

  • $HOME/.bashrc

Giriş kabukları için, config bu dosyalardan okunur:

  • /etc/profile (Her zaman kaynaklı)
  • $HOME/.bash_profile (bu dosyaların geri kalanı, bulunana kadar sırayla kontrol edilir, sonra başkaları okunmaz)
  • $HOME/.bash_login
  • $HOME/.profile

Nasıl yüklendiklerinin / yüklendiklerinin basit gösterimleri aşağıdaki resimdedir.

Ben bir katma echokadar benim .bashrcve.bash_profile

İnteraktif kabuk vs giriş kabuğu

man bashdaha fazla bilgi için bkz .


2
Bu gerçekten eski bir soruya ek bir değer katmaz. Ayrıca, Unix ve Linux'ta yeni olduğunuzu görüyorum, metin resimlerini göndermemeye çalışın, bunun yerine kod bloğu biçimlendirmesini kullanmak ve konsolunuzdan kopyalamak daha iyidir. Bu, metnin aranmasına / kopyalanmasına / vb. Olanak sağlar. Örneğinizde, gerçekten karmaşık bir komut veya arama yapmak için iyi bir şey değil, diğer cevaplar için iyi bir uygulama yoktur.
Centimane

1
'Eski soruya' referansınızı tam olarak anladığımdan emin değilim Bu en üstteki soru listesinde ve 60k görüşüyle ​​alakalı. Daha önceki cevaplar gibi bir diyalog / varsayım yerine, katma değerin formattan geldiğini düşündüm. ancak biçim de düzenlendi. Kod bloklarını kullanma hakkındaki yorumlarınızı aklımda tutacağım, teşekkürler.
Timothy LJ Stewart

2
Cevap yazdığınız için 'aktif' soru listesinin başında yer alıyor. Soru başlangıçta 2014 yılında soruldu ve bir cevap kabul etti. Kabul cevabı amacını belirten .bashrcarasındaki farkı ayırt eder .bashrcve .bash_profileCevabınız içeriğini kapsayan. Cesaretini kırmayın, dürüst bir çaba gösterin, ancak başka cevapların kapsamadığı bazı içeriğe sahip soruları yanıtlamaya odaklanın.
Centimane,
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.