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?


źródło
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`
petersohn
źródło
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.


Marnix A. van Ammers
źródło
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
Rich Homolka
źródło
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)

hoosierEE
źródło
bashnie będzie szukał, ~/.bashrcjeśli jest ~/.bash_profile.
Blacklight Shining