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:
$ bash ; bash ; bash
a następnie Ctrl-Dtrzykrotnie uderzy , .bashrc
uruchomi się trzy razy. Ale jeśli powiesz to:
$ bash -c exit ; bash -c exit ; bash -c exit
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 :
export PATH="$PATH:/some/addition"
Jeśli wstawisz to .bashrc
zamiast tego, za każdym razem, gdy uruchomisz interaktywną podpowłokę, :/some/addition
zostaniesz przywiązany do końca PATH
drugiej, 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.
.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ć inne bash
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 pozyskiwanie https://github.com/junegunn/fzf
za pośrednictwem tej komendy wewnątrz .bashrc
: source ~/.fzf.bash
. Odpalam nowy terminal, a potem Ctrl
+ 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) :
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 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.
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
.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.