.bashrcto skrypt powłoki, który Bash uruchamia za każdym razem, gdy jest uruchamiany interaktywnie. Inicjuje interaktywną sesję powłoki. W tym pliku możesz umieścić dowolne polecenie, które można wpisać w wierszu polecenia.
Tutaj umieszczasz polecenia, aby skonfigurować powłokę do użycia w określonym środowisku lub dostosować rzeczy do swoich preferencji. Wspólną rzeczą do umieszczenia .bashrcsą aliasy , które chcesz zawsze być dostępne.
.bashrcdziała przy każdym uruchomieniu interaktywnej powłoki. Jeśli powiesz:
$ bash ; bash ; bash
a następnie Ctrl-Dtrzykrotnie uderzy , .bashrcuruchomi się trzy razy. Ale jeśli powiesz to:
$ bash -c exit ; bash -c exit ; bash -c exit
wtedy w .bashrcogóle nie będzie działać, ponieważ -cpowoduje, że wywołanie Bash jest nieinteraktywne. To samo dotyczy uruchomienia skryptu powłoki z pliku.
Kontrast .bash_profilei .profilektóre są uruchamiane tylko na początku nowej powłoki logowania. ( bash -l) Ty decydujesz, czy polecenie wchodzi w .bashrctryb vs, w .bash_profilezależności od tego, czy chcesz, aby było uruchamiane raz czy przy każdym uruchomieniu interaktywnej powłoki.
W ramach kontrprzykładu do aliasów, które wolę wstawiać .bashrc, zamiast tego chcesz wprowadzić PATHzmiany .bash_profile, ponieważ zmiany te zwykle nie są idempotentne :
export PATH="$PATH:/some/addition"
Jeśli wstawisz to .bashrczamiast tego, za każdym razem, gdy uruchomisz interaktywną podpowłokę, :/some/additionzostaniesz przywiązany do końca PATHdrugiej, tworząc dodatkową pracę dla powłoki, gdy pomylisz polecenie.
Pojawi się nowy interaktywny powłoki Bash, kiedy tylko bulić odvi z :sh, na przykład.
Drobne spory: w przeciwieństwie do większości innych powłok, bash nie ładuje automatycznie pliku konfiguracyjnego dla każdej instancji, .bashrcgdy jest uruchamiany jako powłoka logowania. Może to czasem prowadzić do nieoczekiwanego zachowania . Zwykłym obejściem jest źródło .bashrcz .profilelub .bash_profilezamiast.
Ilmari Karonen
@IlmariKaronen Ponieważ .bashrcnie jest przeznaczony do użytku przez inne powłoki, lepiej nie jest źródłem .profile( z którego mogą korzystać inne bashpowłoki).
chepner
@IlmariKaronen Co dzieje (czytaj: w jaki sposób można debugować dlaczego) podczas source ~/.bashrclub . ~/.bashrclub [[ -f ~/.bashrc ]] && source. ~/.bashrclub [ -f ~/.bashrc ] && source ~/.bashrcnie działa?
Nikos Alexandris
@NikosAlexandris: To osobne pytanie. Proszę pytać osobno .
Warren Young,
@WarrenYoung Zrobiłbym to, ale zdałem sobie sprawę, że .bashrctak naprawdę jest to źródło (za pomocą zalecanego polecenia superuser.com/a/183980/128768 ). Problem twarz jest właściwie nie pozyskiwanie https://github.com/junegunn/fzfza pośrednictwem tej komendy wewnątrz .bashrc: source ~/.fzf.bash. Odpalam nowy terminal, a potem Ctrl+ Ri dostaję `__fzf_history__`bash: fzf: command not found. Źródło ręcznie .bashrci ten sam skrót klawiszowy uruchamia FZF zgodnie z oczekiwaniami. Przepraszamy za hałas tutaj.
Nikos Alexandris
20
Celem .bashrcpliku jest zapewnienie miejsca, w którym można skonfigurować zmienne, funkcje i aliasy, zdefiniować monit (PS1) i zdefiniować inne ustawienia, których chcesz używać za każdym razem, gdy otwierasz nowe okno terminala.
Działa, uruchamiając się za każdym razem, gdy otwierasz nowy terminal, okno lub panel.
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"
Wyjaśnienie:
-1. Skonfiguruj mój plik historii, aby ignorował duplikaty i był znacznie większy niż domyślny.
-2. Opcja koloru w lszależności od tego, czy korzystasz z systemu Linux, czy OSX
-3. Funkcja „ md”, aby utworzyć i cd do katalogu za pomocą jednego polecenia
-4. Znajdź bieżącą gałąź git, jeśli znajdujesz się w repozytorium git i ...
-5. -9. Zdefiniuj niesamowite podpowiedź PS1, jak w
-10. Ulepszony monit PS2
-11. Ustaw vi jako edytor w wierszu poleceń
-12. Ustaw vi jako domyślny edytor
-13. uruchom mój .bash_aliasesplik, jeśli istnieje
-14. Uruchom mój skrypt ukończenia karty git (dla pilotów i gałęzi), jeśli istnieje.
-15. Wykonaj autojump, jeśli istnieje
-16. Zezwalaj na cd'ing bez wpisywania części cd, jeśli wersja bash> = 4
-17. Wykonaj skrypt zakończenia bash, jeśli istnieje
-18. Użyj TMUX, jeśli jest obecny
-19. Dodaj rvm do mojej ŚCIEŻKI
-20. Użyj rvm, jeśli istnieje.
Zrobiłem to przenośne, aby działało na dowolnym moim komputerze z systemem Linux lub OSX bez dostosowywania - dlatego przed użyciem niektórych funkcji i innych skryptów wykonuje się szereg testów obecności.
Ułatwia to także natychmiastowe użycie całego pliku na nowym komputerze bez problemów, które wpływają na otwarcie nowego okna terminala.
To tak naprawdę nie dodaje dodatkowej wartości staremu pytaniu. Widzę też, że jesteś nowy w Uniksie i Linuksie, staraj się nie publikować zdjęć tekstu, zamiast tego lepiej jest użyć formatowania bloku kodu i skopiować go z konsoli. Umożliwia to wyszukiwanie / kopiowanie tekstu itp. W twoim przykładzie nie ma tak naprawdę żadnych skomplikowanych poleceń ani niczego, co byłoby dobre do przeszukania, ale dobra praktyka dla innych odpowiedzi.
Centimane
1
Nie jestem pewien, czy w pełni rozumiem twoje odniesienie do „starego pytania”. Znajduje się ono na górnej liście pytań i ma związek z 60 000 wyświetleń. Myślałem, że wartość dodana pochodzi z tego formatu, a nie z okna dialogowego / przypuszczenia, jak w poprzednich odpowiedziach. ale format również został edytowany. Będę pamiętać o twoich komentarzach na temat używania bloków kodu, dzięki.
Timothy LJ Stewart
2
Znajduje się na górze „aktywnej” listy pytań, ponieważ wysłałeś odpowiedź. Pytanie zostało pierwotnie zadane w 2014 r. I przyjęło odpowiedź. Zaakceptowana odpowiedź określa cel .bashrci rozróżnia różnicę między treścią odpowiedzi .bashrca tym, .bash_profileco obejmuje. Nie zniechęcaj się, podejmujesz uczciwy wysiłek, ale staraj się koncentrować na odpowiadaniu na pytania z treściami nieobjętymi innymi odpowiedziami.
Odpowiedzi:
.bashrc
to skrypt powłoki, który Bash uruchamia za każdym razem, gdy jest uruchamiany interaktywnie. Inicjuje interaktywną sesję powłoki. W tym pliku możesz umieścić dowolne polecenie, które można wpisać w wierszu polecenia.Tutaj umieszczasz polecenia, aby skonfigurować powłokę do użycia w określonym środowisku lub dostosować rzeczy do swoich preferencji. Wspólną rzeczą do umieszczenia
.bashrc
są aliasy , które chcesz zawsze być dostępne..bashrc
działa przy każdym uruchomieniu interaktywnej powłoki. Jeśli powiesz:a następnie Ctrl-Dtrzykrotnie uderzy ,
.bashrc
uruchomi się trzy razy. Ale jeśli powiesz to:wtedy w
.bashrc
ogóle nie będzie działać, ponieważ-c
powoduje, że wywołanie Bash jest nieinteraktywne. To samo dotyczy uruchomienia skryptu powłoki z pliku.Kontrast
.bash_profile
i.profile
które są uruchamiane tylko na początku nowej powłoki logowania. (bash -l
) Ty decydujesz, czy polecenie wchodzi w.bashrc
tryb vs, w.bash_profile
zależności od tego, czy chcesz, aby było uruchamiane raz czy przy każdym uruchomieniu interaktywnej powłoki.W ramach kontrprzykładu do aliasów, które wolę wstawiać
.bashrc
, zamiast tego chcesz wprowadzićPATH
zmiany.bash_profile
, ponieważ zmiany te zwykle nie są idempotentne :Jeśli wstawisz to
.bashrc
zamiast tego, za każdym razem, gdy uruchomisz interaktywną podpowłokę,:/some/addition
zostaniesz przywiązany do końcaPATH
drugiej, tworząc dodatkową pracę dla powłoki, gdy pomylisz polecenie.Pojawi się nowy interaktywny powłoki Bash, kiedy tylko bulić od
vi
z:sh
, na przykład.źródło
.bashrc
gdy jest uruchamiany jako powłoka logowania. Może to czasem prowadzić do nieoczekiwanego zachowania . Zwykłym obejściem jest źródło.bashrc
z.profile
lub.bash_profile
zamiast..bashrc
nie jest przeznaczony do użytku przez inne powłoki, lepiej nie jest źródłem.profile
( z którego mogą korzystać innebash
powłoki).source ~/.bashrc
lub. ~/.bashrc
lub[[ -f ~/.bashrc ]] && source. ~/.bashrc
lub[ -f ~/.bashrc ] && source ~/.bashrc
nie działa?.bashrc
tak naprawdę jest to źródło (za pomocą zalecanego polecenia superuser.com/a/183980/128768 ). Problem twarz jest właściwie nie pozyskiwaniehttps://github.com/junegunn/fzf
za pośrednictwem tej komendy wewnątrz.bashrc
:source ~/.fzf.bash
. Odpalam nowy terminal, a potemCtrl
+R
i dostaję`__fzf_history__`bash: fzf: command not found
. Źródło ręcznie.bashrc
i ten sam skrót klawiszowy uruchamia FZF zgodnie z oczekiwaniami. Przepraszamy za hałas tutaj.Celem
.bashrc
pliku jest zapewnienie miejsca, w którym można skonfigurować zmienne, funkcje i aliasy, zdefiniować monit (PS1) i zdefiniować inne ustawienia, których chcesz używać za każdym razem, gdy otwierasz nowe okno terminala.Działa, uruchamiając się za każdym razem, gdy otwierasz nowy terminal, okno lub panel.
Możesz zobaczyć mój tutaj (zdjęcie z podświetlaniem składni) :
Wyjaśnienie:
-1. Skonfiguruj mój plik historii, aby ignorował duplikaty i był znacznie większy niż domyślny.
-2. Opcja koloru w
ls
zależności od tego, czy korzystasz z systemu Linux, czy OSX-3. Funkcja „
md
”, aby utworzyć i cd do katalogu za pomocą jednego polecenia-4. Znajdź bieżącą gałąź git, jeśli znajdujesz się w repozytorium git i ...
-5. -9. Zdefiniuj niesamowite podpowiedź PS1, jak w
-10. Ulepszony monit PS2
-11. Ustaw vi jako edytor w wierszu poleceń
-12. Ustaw vi jako domyślny edytor
-13. uruchom mój
.bash_aliases
plik, jeśli istnieje-14. Uruchom mój skrypt ukończenia karty git (dla pilotów i gałęzi), jeśli istnieje.
-15. Wykonaj autojump, jeśli istnieje
-16. Zezwalaj na cd'ing bez wpisywania części cd, jeśli wersja bash> = 4
-17. Wykonaj skrypt zakończenia bash, jeśli istnieje
-18. Użyj TMUX, jeśli jest obecny
-19. Dodaj rvm do mojej ŚCIEŻKI
-20. Użyj rvm, jeśli istnieje.
Zrobiłem to przenośne, aby działało na dowolnym moim komputerze z systemem Linux lub OSX bez dostosowywania - dlatego przed użyciem niektórych funkcji i innych skryptów wykonuje się szereg testów obecności.
Ułatwia to także natychmiastowe użycie całego pliku na nowym komputerze bez problemów, które wpływają na otwarcie nowego okna terminala.
źródło
Jest to
bash
plik konfiguracyjny.Interaktywne (niezalogowane) powłoki, następnie konfiguracja jest odczytywana z tych plików:
$HOME/.bashrc
W przypadku powłok logowania konfiguracja jest odczytywana z tych plików:
/etc/profile
(Zawsze pozyskiwane)$HOME/.bash_profile
(reszta tych plików jest sprawdzana po kolei, dopóki nie zostanie znaleziony, a następnie nie zostaną odczytane żadne inne)$HOME/.bash_login
$HOME/.profile
Prosta ilustracja tego, jak / kiedy są ładowane, znajduje się na poniższym obrazku.
Dodałem
echo
do mojego.bashrc
i.bash_profile
zobacz
man bash
po więcej informacjiźródło
.bashrc
i rozróżnia różnicę między treścią odpowiedzi.bashrc
a tym,.bash_profile
co obejmuje. Nie zniechęcaj się, podejmujesz uczciwy wysiłek, ale staraj się koncentrować na odpowiadaniu na pytania z treściami nieobjętymi innymi odpowiedziami.