Ich kann anscheinend keinen neuen $ PATH so setzen, dass er beim Ausführen von Befehlen über verwendet wird ssh user@host command
. Ich habe versucht export PATH=$PATH:$HOME/new_path
, ~ / .bashrc und ~ / .profile auf dem Remotecomputer hinzuzufügen , aber das Ausführen ssh user@host "echo \$PATH"
zeigt, dass die Änderung nicht übernommen wurde (es zeigt / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games). Auf dem Remote-Computer wird Ubuntu 8.04 ausgeführt.
Ich bin sicher, ich könnte es in / etc / profile hacken, aber das ist keine saubere Lösung und es funktioniert nur, wenn man Root-Zugriff hat.
export PATH=$PATH:$HOME/new_path
, sowohl ~ / .bash_login als auch ~ / .bash_profile hinzuzufügen (zusätzlich zu den zuvor erprobten ~ / .bashrc und ~ / .profile). Beides funktioniert nicht. In beiden Fällen musste ich die Datei erstellen.Antworten:
Wie Grawity sagte, ist ~ / .bashrc das, was Sie wollen, da es von nicht interaktiven Nicht-Login-Shells bezogen wird.
Ich gehe davon aus, dass das Problem mit der Standarddatei Ubuntu ~ / .bashrc zu tun hat. Es beginnt normalerweise mit so etwas:
Sie möchten alles für nicht interaktive Shells vor diese Zeile stellen.
quelle
export PATH=$PATH:$HOME/new_path
über diese Linie verschoben und es hat funktioniert. Vielen Dank!.zshenv
für zsh Benutzer erwähnen , es hat eine ganze Weile gedauert, bis ich es in den Kommentaren zu anderen Antworten gefunden habeHast du ein
~/.bash_login
oder~/.bash_profile
?Bash im interaktiven Modus sucht nach diesen Dateien und verwendet die erste vorhandene in dieser Reihenfolge:
~/.bash_profile
~/.bash_login
~/.profile
Wenn Sie also eine haben
~/.bash_profile
,~/.profile
bleiben alle Änderungen, die Sie vornehmen, unsichtbar.Bash im nicht interaktiven Modus liest manchmal die Datei
~/.bashrc
(die auch häufig aus den interaktiven Skripten stammt). Mit "manchmal" meine ich, dass sie verteilungsabhängig ist: Seltsamerweise gibt es eine Option zur Kompilierungszeit, um dies zu aktivieren . Debian ermöglicht das~/.bashrc
Lesen, zB Arch nicht.ssh
scheint den nicht interaktiven Modus zu verwenden,also~/.bashrc
sollte genug sein. Bei solchen Problemen füge ich normalerweise ein paar Echos hinzu, um zu sehen, welche Dateien ausgeführt werden.quelle
~/.bashrc
"? Ich sehe diese Aussage nicht in der Manpage. Danke~/.bashrc
, müssen Sie anscheinend zusätzlich die Umgebungsvariable festlegenBASH_ENV
. siehe superuser.com/a/585699/100843 . Bei nicht interaktiven Login-Shells müssten Sie wahrscheinlich eines der drei von Ihnen erwähnten Startskripte ändern..zshenv
.zshenv
wird immer bezogen; Es spielt keine Rolle, ob es interaktiv ist oder nicht.ssh Dokumentation sagt:
Aus diesem Grund funktioniert das Hinzufügen zu den bashrc-Dateien nicht. Sie haben jedoch folgende Möglichkeiten:
Wenn die
PermitUserEnvironment
Option in der sshd-Konfiguration festgelegt ist, können Sie Ihre PATH-Einstellung hinzufügen~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
quelle
man sshd_config
besagt, dass es standardmäßig deaktiviert ist. Daher ist es unwahrscheinlich, dass diese Lösung für die meisten Benutzer funktioniert. 2. Dies würde funktionieren, aber ich kann den an ssh gesendeten Befehl nicht einfach ändern (siehe den zweiten Kommentar zu meiner Frage).Man kann immer sagen:
quelle
Zusätzlich zur Antwort @signpolyma müssen Sie Ihren Export vor diesen Zeilen hinzufügen
quelle
Hatte gerade das gleiche Problem selbst, löste es mit:
quelle