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?
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?
Odpowiedzi:
Istnieje plik ~/.profile
(lub ~/.bash-profile
), który działa przy każdym logowaniu. Powinieneś tam ustawić zmienne środowiskowe (za pomocą export
polecenia). I jest ~/.bashrc
plik, 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`
~/.bashrc
(wspominasz nawet, że w OP może brakować kropki!). Również ~/.aliases
lub nie~/.bash_aliases
jest automatycznie pozyskiwany. Muszą być instrukcje, aby wyraźnie to zrobić. ~/.bashrc
~/.bash_profile
podkreślenie, a nie myślnik.
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.
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
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_profile
nastę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
)
bash
nie będzie szukał, ~/.bashrc
jeśli jest ~/.bash_profile
.
~/.bashrc
? Prawdopodobnie dla PATH włożyłbym to~/.bash_profile
. Tak czy inaczej, kropka jest konieczna.