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?
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:
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.
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.
~/.bashrc
? Prawdopodobnie dla PATH włożyłbym to~/.bash_profile
. Tak czy inaczej, kropka jest konieczna.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
(lubchsh -s /bin/bash
, w zależności od systemu operacyjnego) lub zadzwoń do SSH w następujący sposób:źródło
~/.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:
ale wartość zmiennej PATH nie jest używana do wyszukiwania nazwy pliku.
źródło
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:
źródło
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: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
)źródło
bash
nie będzie szukał,~/.bashrc
jeśli jest~/.bash_profile
.