.bashrc przy logowaniu ssh


374

Kiedy ssh do mojego ubuntu-box z systemem Hardy 8.04, zmienne środowiskowe w moim .bashrcnie są ustawione.

Jeśli zrobię źródło .bashrc, zmienne są poprawnie ustawione i wszystko jest w porządku.

Dlaczego .bashrcnie jest uruchamiany przy logowaniu?


92
Jak, u licha, jest to „nie na temat”?
— Jonah

8
Nie jestem taki surowy, ale przypuszczam, że należy do serverfault.com, superuser.com lub askubuntu.com
— Michael Butler

16
@MichaelButler Zgoda. Zastanawiam się, dlaczego nie przenoszą go, a nie zamykają ...
— Luc

4
@Luc - pytania można przenosić w ciągu 60 dni od ich utworzenia. To pytanie zostało zamknięte jako nie na temat do 3 i pół roku po jego utworzeniu. Uważam, że reguła 60 dni ma coś wspólnego z tworzeniem kopii zapasowej baz danych pytań lub czymś ... migracja po utworzeniu kopii zapasowej jest trudniejsza.
— ArtOfWarfare

Myślałem, że to całkiem przydatne pytanie. Wystąpił ten problem, gdy musiałem ssh na maszynie A, aby ssh na maszynę B (dostępne tylko przez sieć lokalną A). Nauczyła mnie praktycznej różnicy między .bashrci .bash_profile!
— information_interchange

Odpowiedzi:


620

.bashrcnie jest pozyskiwany podczas logowania przy użyciu SSH. Musisz go zdobyć w .bash_profilenastępujący sposób:

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

32
to powinno działać na każdej rozsądnej dystrybucji z Bash, dlatego wszystkie te komentarze są przestarzałe :)

1
Nie jest to konieczne w przypadku serwera Ubuntu 12.04 LTS, ponieważ .bashrcdomyślnie jest on pozyskiwany przy SSH.
— orokusaki,

4
@orokusaki: Korekta, to jest :) Wystąpił nieuczciwy plik .bash_profile, który zmuszał .profile do pominięcia.
— Lester Peabody

4
Podobnie jak @LesterPeabody, mój plik .bashrc nie był pozyskiwany na serwerze LTS Ubuntu 12.04 z powodu nieuczciwego profilu .bash_bash. Został stworzony przez instalację RVM. Przeniosłem komendę RVM do pliku .profile i usunąłem plik .bash_profile. Wszystko działa już dobrze.
— Rod Daunoravicius

4
fwiw Debian Jessie / 8 jest już dostępny po .bashrcwyjęciu z pudełka - ale robi to z .profile, nie .bash_profile.
— underscore_d

75

Miałem podobną sytuację jak Hobhouse. Chciałem użyć polecenia

 ssh myhost.com 'some_command'

a „some_command” istnieje w „/ var / some_location”, więc próbowałem dołączyć „/ var / some_location” w środowisku PATH, edytując „$ HOME / .bashrc”

ale to nie działało. ponieważ domyślny plik .bashrc (Ubuntu 10.4 LTS) zapobiega pobieraniu kodu według kodu jak poniżej

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

więc jeśli chcesz zmienić środowisko dla powłoki non-login ssh. powinieneś dodać kod powyżej tej linii.


7
Dzięki stary! To było coś, co nie działało dla mnie :)
— Raymond Barlow,

Chłodna końcówka. Wpadłem w tę pułapkę podczas uruchamiania skryptów z jenkins. Zalogowałem się przez ssh i zadziałało. Jenkins zalogował się nieinteraktywnie i to się nie udało.
— Krzysztof Jabłoński,

1
Dlaczego powszechnym rozwiązaniem nie jest nawet wyznaczenie nowej ścieżki dla nieinteraktywnych powłok, to jest poza mną. Właśnie z tego powodu powinno być o wiele więcej niż instrukcja if. Wygląda na to, że tylko aliasy i inicjalizacja narzędzi interaktywnych powinny zejść poniżej tej linii ...
— BenPen

2
W innej wersji Ubuntu test interaktywny wygląda następująco:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
— Sylvain

Dzięki, rozwiązało to dla mnie. Szkoda, że ​​nie widziałem tego godzinę temu!
— Justin Lawrence

31

Aby dowiedzieć się więcej o tym, jak działa wywoływanie bash, jakie pliki dots robią i jak ich używać / konfigurować, przeczytaj:


Kluczowe przejście: „powoduje odczyt pliku / etc / profile, a następnie jednego z .bash_profile lub .bash_login lub .profile.”
— Andy Hayden,

29

Jeśli rozwiązanie ayman nie działa, spróbuj nazwać swój plik .profilezamiast .bash_profile. To działało dla mnie.


2
Niesamowite. Straciłem 15 minut na tym szczególe.
— vmassuchetto


1
myślę, że .profile ładuje się przy logowaniu do GUI. .bash_profile służy do logowania do terminali.
— Razec Luar

Działa to również w przypadku logowania SSH do kontenera dokującego Debian Jessie (używanie kontenera tylko z danymi do trwałego przechowywania) - ALE możesz również sprawdzić / etc / passwd, aby sprawdzić, czy twoja powłoka logowania to / bin / bash & not / bin / sh -------> / bin / dash
— Stuart Cardall

1
@RazecLuar .profilema być wykonywany przez dowolną powłokę logowania, niezależnie od tego, czy wspomniana powłoka zamierza odrodzić GUI. Twój komentarz jest całkowicie sprzeczny z pytaniem i tą odpowiedzią, która wyraźnie wskazuje, że .profilejest wywoływane w SSHing w - wyraźnie nie GUI.
— underscore_d
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.