Wenn ich mein Programm interaktiv starte, funktioniert es einwandfrei:
ssh somehost
$ ~/some/path/somescript.py
Wenn ich mein Programm direkt über ssh starte, funktioniert es nicht. Die Variable PYTHONPATH
ist nicht gesetzt, da .bashrc
keine Quelle vorhanden ist.
ssh somehost ~/some/path/somescript.py
Wenn ich renne ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'
, funktioniert es gut.
Letzteres würde aber für einige andere Leute nicht funktionieren, zB mit tcsh und ohne a ~/.bashrc
).
Was ist der Befehl, um eine Sache über ssh auf einem anderen Host auszuführen, der für alle Shells funktioniert?
bash
ssh
environment-variables
remote
bzdjamboo
quelle
quelle
bash
, wird sie als Quelle.bash_profile
oder.profile
für ein interaktives Login und.bashrc
für ein nicht interaktives Login verwendet. Wenn Ihre Anmeldeshell mit bash assh
oder ash oder ksh aufgerufen wird , wird.profile
eine interaktive Anmeldung und eine nicht interaktive Anmeldung als Quelle verwendet .Antworten:
Es gibt keine Standarddatei pro Benutzer, die für nicht interaktive Anmeldungen ausgeführt wird. Sie müssen entweder das Programm in sich abgeschlossen machen, damit es seine Abhängigkeiten finden kann, ohne auf nicht standardmäßige Umgebungsvariablen angewiesen zu sein, oder die Umgebung explizit festlegen, normalerweise mit
Sie sollten keine Umgebungsvariablen in setzen
.bashrc
: Diese Datei ist für interaktive Shells gedacht und wird in jeder Bash-Instanz gelesen. Es sollten Umgebungsvariablen festgelegt werden.profile
, die beim Anmelden gelesen werden. Abgesehen von der sehr geringen Anzahl von Benutzern, die.profile
keine Bourne-Shell als Anmeldeshell verwenden, funktioniert dies für alle Benutzer , unabhängig davon, ob sie bash oder zsh oder verwenden csh oder fischen interaktiv. Siehe auch Unterschied zwischen .bashrc und .bash_profile . Welche Setup-Dateien sollten zum Einrichten von Umgebungsvariablen mit bash verwendet werden? .Davon abgesehen gibt es eine Möglichkeit, jedes Mal ein Skript zu erstellen, wenn Sie sich mit einem bestimmten Schlüssel über ssh anmelden. Siehe Gibt es eine Möglichkeit, Shell-Konfigurationsinformationen zu übertragen, wenn SSH an einen Host gesendet wird? , sh Startdateien über ssh .
quelle
Ich hatte das gleiche Problem, aber für mich war die Lösung anders. Mein Benutzer war nicht für die Verwendung von bash als Shell konfiguriert, sondern verwendete stattdessen zsh als Shell. Daher wurden die bash-Punktdateien beim Anmelden nicht ausgeführt. Öffnen Sie / etc / passwd mit einem Texteditor und suchen Sie nach Ihrem Benutzernamen und der verwendeten Shell:
So sieht meine Benutzereingabe aus. Beachten Sie, dass / bin / zsh anstelle von / bin / bash steht. Für zsh lautet die richtige Punktdatei ~ / .zprofile. Der Inhalt wird jedes Mal ausgeführt, wenn Sie sich mit ssh anmelden.
quelle