Jak na stałe ustawić moje zmiany bashrc?


7

Za każdym razem, gdy loguję się do SSH, muszę ręcznie pobrać plik bashrc, aby ustawić zmienne ścieżki tak, jak chcę. Jak mam to zrobić automatycznie? Czy nie powinno być automatyczne?

bash  path  bashrc 

4
Czy to powinno być ~/.bashrc? Prawdopodobnie dla PATH włożyłbym to ~/.bash_profile. Tak czy inaczej, kropka jest konieczna.
mpez0

Odpowiedzi:


5

Istnieje plik ~/.profile(lub ~/.bash-profile), który działa przy każdym logowaniu. Powinieneś tam ustawić zmienne środowiskowe (za pomocą exportpolecenia). I jest ~/.bashrcplik, który jest uruchamiany przy otwieraniu każdej sprzedaży. Polecenia, które nie są dziedziczone do wszystkich podpowłok, takie jak alias, można ustawić tutaj (chociaż dla dobrej praktyki, aliasy powinny być ustawione ~/.aliases, co jest automatycznie pobierane przez ~/.bashrc).

Jeśli to nie zadziała, albo użyjesz niewłaściwej nazwy pliku (brak „.” Od początku?), Albo nie użyjesz basha jako powłoki. W tym drugim przypadku spróbuj passwd -s /bin/bash(lub chsh -s /bin/bash, w zależności od systemu operacyjnego) lub zadzwoń do SSH w następujący sposób: 

ssh username@host bash`

3
Powinna być kropka: ~/.bashrc(wspominasz nawet, że w OP może brakować kropki!). Również ~/.aliaseslub nie~/.bash_aliases jest automatycznie pozyskiwany. Muszą być instrukcje, aby wyraźnie to zrobić. ~/.bashrc
Dennis Williamson

Myślę, że miałeś na myśli ~/.bash_profilepodkreślenie, a nie myślnik.
Cristian Ciupitu

3

Powinieneś również wiedzieć o $ BASH_ENV.

Jakie pliki są odczytywane przez bash podczas uruchamiania zależy od tego, czy sesja jest interaktywna, czy nie. Czasami może wystąpić problem, gdy nie jest jasne, czy sesja jest interaktywna. Więc oprócz ~ / .bashrc możesz także wyeksportować i ustawić zmienną BASH_ENV tak, aby wskazywała na plik zawierający PATH i inne potrzebne ustawienia. BASH_ENV można ustawić tak, aby wskazywało plik .bashrc (czasami jest to .bash_rc), o ile nie ma tam żadnych interaktywnych poleceń (aby być bezpiecznym, użyj oddzielnego pliku, powiedz ~ / .bash_env). Ze stron podręcznika bash:


Gdy interaktywna powłoka, która nie jest powłoką logowania, jest uruchomiona, bash odczytuje i wykonuje polecenia z ~ / .bashrc, jeśli ten plik istnieje. Może to być zablokowane przez użycie opcji --norc. Opcja --rcfile zmusi bash do czytania i wykonywania poleceń z pliku zamiast ~ / .bashrc.

Gdy bash jest uruchamiany nieinteraktywnie, aby uruchomić skrypt powłoki, na przykład szuka zmiennej BASH_ENV w środowisku, rozszerza jej wartość, jeśli się tam pojawi, i używa rozszerzonej wartości jako nazwy 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ść zmiennej PATH nie jest używana do wyszukiwania nazwy pliku.



1

Wiem, że jest stary, ale myślę, że na nowej powłoce logowania bash szuka pojedynczego pliku do uruchomienia. Szuka pliku .bash_profile, a następnie .profile, a następnie .bashrc. Jeśli znajdzie .bash_profile lub .profile, nie będzie dalej szukał .bashrc.

Rozwiązanie, umieść swój profil .profile:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

1

Istnieje już kilka (prawdopodobnie poprawnych) odpowiedzi, ale miałem ten sam problem i to właśnie dla mnie działało:

dodaj do ~/.bash_profilenastępujących wierszy:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

Zobacz tutaj i tutaj, aby uzyskać więcej informacji.

(uwaga, w moim katalogu $ HOME miałem już następujące pliki: .bash_aliases .bash_history .bash_logout .bash_profile .bashrc)


bashnie będzie szukał, ~/.bashrcjeśli jest ~/.bash_profile.
Blacklight Shining
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.