Ich gebe den Pfad zu meinem Befehl in der Datei / etc / profile an :
export PATH=$PATH:/usr/app/cpn/bin
Mein Befehl befindet sich in:
$ which ydisplay
/usr/app/cpn/bin/ydisplay
Wenn ich also eine "echo $ PATH" -Ausgabe durchführe, sieht es so aus:
$ echo $PATH
...:/usr/app/cpn/bin
Und alles ist in Ordnung, aber wenn ich versuche, meinen Befehl über SSH zu starten, wird folgende Fehlermeldung angezeigt:
$ ssh 127.0.0.1 ydisplay
$ bash: ydisplay: command not found
Aber mein Weg ist immer noch vorhanden:
$ ssh 127.0.0.1 echo $PATH
...:/usr/app/cpn/bin
Bitte erläutern Sie mir, warum Bash ydisplay während der SSH-Sitzung nicht finden kann und wie SSH ordnungsgemäß konfiguriert wird, um dieses Problem zu vermeiden.
Darüber hinaus funktioniert alles korrekt, wenn ich im aktuellen Benutzer $ PATH in der lokalen Datei .bashrc angegeben habe. Ich möchte jedoch nur eine Datei ändern und stattdessen viele Dateien für jeden Benutzer angeben. Deshalb frage ich.
ydisplay
? funktioniertssh 127.0.0.1 /usr/app/cpn/bin/ydisplay
?ssh 127.0.0.1 echo $PATH
Tut nicht das, was Sie vielleicht denken: Die Shell erweitert $ PATH, bevor ssh überhaupt ausgeführt wird, sodass nichts bewiesen oder widerlegt wird.Antworten:
tl; dr
Laufende
ssh 127.0.0.1 ydisplay
Quellen~/.bashrc
anstatt/etc/profile
. Ändern Sie~/.bashrc
stattdessen Ihren Pfad .Einzelheiten
Es wird nur
/etc/profile
gelesen, wenn Ihre Shell eine "Login-Shell" ist.Aus dem Bash-Referenzhandbuch :
Aber wenn Sie ausführen
ssh 127.0.0.1 ydisplay
,bash
wird nicht als Login-Shell gestartet. Es wird jedoch eine andere Startdatei gelesen. Das Bash-Referenzhandbuch lautet:Sie sollten also Ihre
PATH
Einstellungen vornehmen~/.bashrc
.Auf den meisten Systemen
~/.bash_profile
Quellen~/.bashrc
, so dass Sie Ihre Einstellungen nur in,~/.bashrc
anstatt in beiden Dateien zu speichern.Es gibt keine Standardmethode die Einstellung für alle Benutzer zu ändern, aber die meisten Systeme haben ein
/etc/bashrc
,/etc/bash.bashrc
oder ähnliches.Andernfalls richten Sie
pam_env
diePATH
Einstellung ein und setzen sie ein/etc/environment
.Siehe auch:
quelle
In der Vergangenheit wurden die Profildateien (
/etc/profile
und~/.profile
) beim Anmelden (auf der Textkonsole, was noch?) Aufgerufen und dienten vielen Zwecken:stty
. B. ).Alle diese Zwecke wurden erst später als getrennt identifiziert. Da die Profilskripte möglicherweise Dinge tun, die nur in einer interaktiven Sitzung sinnvoll sind (Terminalinteraktion, Starten anderer Programme), haben die Marken von rsh bei Einführung des Remote-Shell-Aufrufs ( rsh ) beschlossen, die Remote-Shell nicht als Anmeldeshell aufzurufen. damit die Profilskripte nicht ausgeführt werden. (Einige Versionen von
rshd
haben die Option, die Remote-Shell als Anmeldeshell auszuführen.) Ssh hat dieses Verhalten kopiert, um als Drop-In-Ersatz für rsh zu fungieren.Wenn Sie Ihre Profilskripte ausführen lassen möchten, können Sie sie explizit aufrufen.
Beachten Sie den Befehl
.
zum Laden der Profilskripte in die Shell: Es handelt sich um Befehle, die in dieser Shell ausgeführt werden sollen, nicht um ein externes Programm.Wenn Sie eine Umgebungsvariable global für alle Benutzer festlegen möchten, gibt es auf vielen Systemen eine andere Methode: Anstatt sie zu definieren
/etc/profile
, definieren Sie sie in/etc/environment
. Diese Datei wird durch daspam_env
Modul gelesen . Die meisten Linux-Distributionen sind zum Lesen eingerichtet.Wenn Ihre Login-Shell bash ist, gibt es eine weitere Möglichkeit. Normalerweise sollten Sie keine Umgebungsvariablen festlegen
.bashrc
(da diese in X-Sitzungen nur festgelegt werden, wenn Sie ein Terminal mit einer interaktiven Shell durchlaufen, da sie nicht festgelegt werden, wenn Sie sich interaktiv an einer Textkonsole oder darüber anmelden ssh, weil sie benutzerdefinierte Einstellungen überschreiben, wenn Sie eine Shell in einem anderen Programm aufrufen). Bash hat jedoch eine seltsame Funktion, die ich nie verstanden habe: Es liest sich~/.bashrc
unter zwei nicht zusammenhängenden Umständen:rshd
oder aufgerufen wurdensshd
.Wenn Sie einen Befehl über ssh ausführen, befinden Sie sich im zweiten Fall. Sie können veranlassen, dass Ihr Profil durch Lesen
/etc/profile
und.profile
von gelesen wird.bashrc
. Fügen Sie den folgenden Code in Ihren ein~/.bashrc
:quelle