.bashrc bei ssh login


374

Wenn ich in meine Ubuntu-Box ssh, in der Hardy 8.04 ausgeführt wird, werden die Umgebungsvariablen in meiner .bashrcnicht festgelegt.

Wenn ich eine Quelle mache .bashrc, sind die Variablen richtig gesetzt und alles ist gut.

Wie kommt .bashrces, dass beim Anmelden nicht ausgeführt wird?


92
Wie um alles in der Welt ist dieses "Off Topic"?
Jonah

8
Ich bin nicht so streng, aber ich vermute, dass dies in serverfault.com, superuser.com oder askubuntu.com gehört
Michael Butler

16
@ MichaelButler Einverstanden. Ich frage mich, warum sie es nicht bewegen, anstatt es einfach zu schließen ...
Luc

4
@Luc - Fragen können nur innerhalb von 60 Tagen nach ihrer Erstellung verschoben werden. Diese Frage wurde erst dreieinhalb Jahre nach ihrer Erstellung als Off-Topic-Frage geschlossen. Ich glaube, die 60-Tage-Regel hat etwas damit zu tun, wann die Fragendatenbanken gesichert werden oder so ... es wird schwieriger, nach dieser Sicherung zu migrieren.
ArtOfWarfare

Ich fand das eine ziemlich nützliche Frage. Dieses Problem trat auf, als ich in Maschine A ssh musste, um in Maschine B zu ssh (nur über das lokale Netzwerk von A zugänglich). Hat mir einen praktischen Unterschied zwischen .bashrcund beigebracht .bash_profile!
information_interchange

Antworten:


620

.bashrcwird nicht bezogen, wenn Sie sich mit SSH anmelden. Sie müssen es .bash_profilewie folgt beschaffen:

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

32
Dies sollte auf jeder vernünftigen Distribution mit Bash funktionieren, daher sind alle diese Kommentare veraltet :)

1
Dies ist beim Ubuntu 12.04 LTS-Server nicht erforderlich, da er .bashrcstandardmäßig beim SSH verwendet wird.
Orokusaki

4
@orokusaki: Korrektur, es ist :) Es gab eine betrügerische .bash_profile-Datei, die das Überspringen von .profile erzwang.
Lester Peabody

4
Wie bei @LesterPeabody wurde meine .bashrc-Datei aufgrund eines nicht autorisierten .bash_profile nicht auf einem Ubuntu 12.04 LTS-Server bezogen. Es wurde von der RVM-Installation erstellt. Ich habe den RVM-Befehl nach .profile verschoben und .bash_profile gelöscht. Jetzt läuft alles gut.
Rod Daunoravicius

4
fwiw Debian Jessie / 8 bezieht bereits .bashrcOut-of-the-Box- Quellen - aber das tut es .profilenicht .bash_profile.
underscore_d

75

Ich hatte eine ähnliche Situation wie Hobhouse. Ich wollte den Befehl verwenden

 ssh myhost.com 'some_command'

und 'some_command' existiert in '/ var / some_location', also habe ich versucht, '/ var / some_location' in der PATH-Umgebung anzuhängen, indem ich '$ HOME / .bashrc' bearbeitet habe.

aber das hat nicht funktioniert. weil standardmäßig .bashrc (Ubuntu 10.4 LTS) die Beschaffung durch Code wie unten verhindert

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

Wenn Sie also die Umgebung für die SSH-Shell ohne Anmeldung ändern möchten. Sie sollten Code über dieser Zeile hinzufügen.


7
Danke Kumpel! Dies war das bisschen, das für mich nicht funktioniert hat :)
Raymond Barlow

Kühle Spitze taut. Ich bin in diese Falle geraten, als ich Skripte von Jenkins ausgeführt habe. Ich habe mich über ssh angemeldet und es hat funktioniert. Jenkins loggte sich nicht interaktiv ein und es schlug fehl.
Krzysztof Jabłoński

1
Warum die übliche Lösung darin besteht, nicht einmal einen neuen Pfad für nicht interaktive Shells festzulegen, ist mir ein Rätsel. Genau aus diesem Grund sollte es einiges darüber geben. Es scheint, als sollten nur die Aliase und die Initialisierung interaktiver Tools unter diese Linie gehen ...
BenPen

2
Auf einer anderen Version von Ubuntu sieht der interaktive Check so aus:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain

Danke, das hat es für mich gelöst. Ich wünschte, ich hätte das vor ungefähr einer Stunde gesehen!
Justin Lawrence

31

Lesen Sie Folgendes, um eine hervorragende Ressource zu erhalten, wie Bash-Aufrufe funktionieren, welche Dotfiles was tun und wie Sie sie verwenden / konfigurieren sollten:


Die Schlüsselpassage: "Lässt / etc / profile und dann eines von .bash_profile oder .bash_login oder .profile lesen."
Andy Hayden

29

Wenn die Lösung von ayman nicht funktioniert, benennen Sie .profilestattdessen Ihre Datei .bash_profile. Das hat bei mir funktioniert.


2
Genial. Ich habe 15 Minuten bei diesem Detail verloren.
Vmassuchetto

Dies hat den Trick unter Ubuntu 12.10
ThinkCode

1
Ich denke, .profile lädt auf GUI-Login. .bash_profile ist für Terminal-Logins.
Razec Luar

Dies funktionierte auch für die SSH-Anmeldung bei einem Debian Jessie-Docker-Container (unter Verwendung eines Nur-Daten-Containers für die dauerhafte Speicherung) - ABER Sie möchten möglicherweise auch / etc / passwd überprüfen, um zu überprüfen, ob Ihre Anmeldeshell / bin / bash & not / bin / sh ist -------> / bin / dash
Stuart Cardall

1
@RazecLuar .profilesoll von jeder Login-Shell ausgeführt werden, unabhängig davon, ob diese Shell beabsichtigt, eine GUI zu erzeugen . Ihr Kommentar widerspricht völlig der Frage und dieser Antwort, die eindeutig darauf hinweisen, dass .profileSSHing in aufgerufen wird - eine eindeutig nicht-GUI-Methode.
underscore_d
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.