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