Co to jest plik .bashrc?

100

Powłoki uniksowe podczas uruchamiania czytają .bashrcplik i wykonują zapisane w nim polecenia. Co to jest ten plik i co wykonuje?

Ananas
źródło
2
Spróbuj otworzyć plik w edytorze tekstu - jest to zwykły tekst.
Will Bickford,

Odpowiedzi:

66

Właściwie, to bashkonkretnie, że czyta .bashrc(a /etc/bash.bashrc). Istnieje wiele różnych powłok.

Strona podręcznika bash (autorstwa Briana Foxa i Cheta Rameya; strona informacyjna „Pliki startowe Bash” ) to autorytatywne odniesienie:

Po uruchomieniu interaktywnej powłoki, która nie jest powłoką logowania, bash czyta i wykonuje polecenia z ~/.bashrc, jeśli plik istnieje. Można temu zapobiec, używając tej --norcopcji. Opcja --rcfilepliku zmusi bash do odczytu i wykonywania poleceń z pliku zamiast ~/.bashrc.

Gdy bash jest uruchamiany nieinteraktywnie, na przykład w celu uruchomienia skryptu powłoki szuka zmiennej BASH_ENVw środowisku, rozszerza jej wartość, jeśli się tam pojawia, i wykorzystuje rozszerzoną wartość jako nazwę pliku do odczytu i wykonania. Bash zachowuje się tak, jakby wykonano następujące polecenie:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  

ale wartość PATHzmiennej nie jest używana do wyszukiwania nazwy pliku.

Plik to tylko polecenia powłoki. Zwykle służy do zmiany podpowiedzi, ustawiania zmiennych środowiskowych i definiowania procedur powłoki. Plik ten .profilejest tradycyjnie wykorzystywany do tego celu, ale bashma tak wiele rozszerzeń, że potrzebuje własnego pliku startowego dla użytkowników, którzy chcą umieścić bashisms w plikach startowych.

Brak powłoki logowania ” oznacza takie rzeczy, jak uruchamianie skryptów i zwykle okna terminali uruchamiane przez menedżerów okien. Czasami konfiguruję systemy * nix, aby mieć .bashrci BASH_ENVpo prostu źródło .profile. Dopóki nie zbłądzisz poza poleceniami powłoki POSIX, będziesz mieć taką samą inicjalizację w dowolnej powłoce.

Jest to szczególnie cenne, kiedy shjest naprawdę bash, co czasem się zdarza. Aby to zrobić, użyj:

. .profile

Jednym z powodów, dla których wszystko jest tak złożone, jest to, że czasami ludzie umieszczają rzeczy, które produkują dane wyjściowe w plikach startowych powłoki lub bezwarunkowo ustawiają monity. Powoduje to wiele problemów podczas uruchamiania programów powłoki i poleceń backtick w językach, nie wspominając o system(3)programach C. bashMyślę, że sposób uruchamiania ma jeden plik, w którym ustawienie danych wyjściowych i monitów jest OK, i jeden plik, w którym nie ma. Tradycyjnie przeprowadzany byłby test czasu wykonywania w celu rozróżnienia interaktywności, na przykład sprawdzanie, czy ustawiony jest monit.

DigitalRoss
źródło
Dobra odpowiedź. Tylko cytat: plik to tylko polecenia powłoki. Zwykle służy do zmiany podpowiedzi, ustawiania zmiennych środowiskowych i definiowania procedur powłoki.
smwikipedia,
2
Czy ktoś wie, co oznacza część rc .bashrc / .zshrc?
WORMSS,
4
@WORMSS: Dobre pytanie! Nie jesteś jedynym, który się nad tym zastanawia .
Caleb Xu,
Może rc oznacza konfigurację środowiska wykonawczego.
Mike Diehn
12

Kiedy Bash się uruchamia, wykonuje polecenia w różnych skryptach.

Gdy Bash jest wywoływany jako interaktywna powłoka logowania, najpierw czyta i wykonuje polecenia z pliku / etc / profile, jeśli ten plik istnieje. Po odczytaniu tego pliku szuka ~ / .bash_profile, ~ / .bash_login i ~ / .profile, w tej kolejności, i odczytuje i wykonuje polecenia z pierwszego, który istnieje i jest czytelny.

Po wyjściu z powłoki logowania Bash odczytuje i wykonuje polecenia z pliku ~ / .bash_logout, jeśli istnieje.

Po uruchomieniu interaktywnej powłoki, która nie jest powłoką logowania, Bash odczytuje i wykonuje polecenia z ~ / .bashrc, jeśli ten plik istnieje. Można temu zapobiec, używając opcji --norc. Opcja --rcfile pliku zmusi Bash do odczytu i wykonywania poleceń z pliku zamiast ~ / .bashrc.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Oto kilka sztuczek i wskazówek:

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Spróbujmy ustawić monit, aby mógł wyświetlać dzisiejszą datę i nazwę hosta:

PS1="\d \h $ "
randomx
źródło
1
Dlaczego .profilepo .bash_profile? Jakaś logika?
Pacerier
10

Powinien zawierać różne polecenia „inicjalizacji” dla twojej powłoki, np .:

  • Tworzenie przydatnych aliasów (na przykład alias ll='ls -l').
  • Dodanie kolejnych katalogów do PATH.
  • Ustawianie nowych zmiennych środowiskowych.
Roman Zeyde
źródło
Jakie jest użycie aliasu?
ananas
2
@pineapple: Alias ​​jest sposobem na uruchomienie polecenia, które może być długie, z krótszym. Na przykład alias ll='ls -l'umożliwia wpisanie polecenia w llcelu wykonania ls -lpolecenia.
Wuffers