.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?

Hobhouse
źródło
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
Ayman Hourieh
źródło
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.

ruseel
źródło
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:

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

Loïc Wolff
źródło
2
Niesamowite. Straciłem 15 minut na tym szczególe.
vmassuchetto
To
załatwiło sprawę
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