Ich habe Folgendes in meinen .emacs:
%Vor% Wenn ich also eine Datei mit tramp über ssh öffne, erwarte ich, dass mein PATH
/some/path
enthält. Stattdessen gibt M-! echo $PATH
den Befehl
Auch wenn ich export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATH
in .bashrc
oder .profile
, PATH
nicht richtig gesetzt habe.
Im Tramp-Protokoll, *debug tramp/ssh remotehost*
, kann ich sehen, dass tramp explizit PATH
:
Wenn ich echo "in .bashrc"
in mein .bashrc
einfüge, erscheint es im Tramp-Protokoll, also weiß ich, dass tramp es liest.
Wie kann ich dem Tramp die richtige PATH
geben?
Emacs Version: 24.2.1
Tramp-Version: 2.2.3-24.1
Peinlich ist die Antwort im Tramp-Handbuch:
%Vor%Eine andere Möglichkeit besteht darin, die Pfadeinstellungen Ihres Remote-Kontos bei der Anmeldung erneut zu verwenden. Diese Einstellungen werden normalerweise überschrieben, da sie möglicherweise nicht für Tramps nützlich sind. Der Platzhalter tramp-own-remote-path behält diese Einstellungen bei. Sie können es über
aktivieren
Ich bin mir immer noch nicht sicher, warum es die anderen Pfade ignoriert, die zu tramp-remote-path
hinzugefügt wurden.
Ich habe das im Tramp-Handbuch gelesen und es versucht. Hinzugefügt
%Vor% Dann wurde emacs beendet, ~/.emacs.d/tramp
entfernt und wie in hier
Aber M-! echo $PATH
zeigt immer noch den Wert von tramp-default-remote-path
anstelle des Wertes in meinem .bashrc
.
Das Problem scheint zu verstehen, wie Profile geladen werden. Die Art und Weise wie Tramp die entfernte Shell aufruft, um den Remote PATH zu erhalten:
%Vor% Da bash als Login-Shell aufgerufen wird und als /bin/sh
lautet .profile
anstelle von .bash_profile
oder .bashrc
.
Ich habe das in bash manual page gefunden:
Wenn bash mit dem Namen sh aufgerufen wird, versucht es das Startverhalten von zu imitieren historische Versionen von sh so nah wie möglich, während mit den POSIX-Standard auch. Wenn sie als interaktive Login-Shell oder a nicht interaktive Shell mit der Option --login, versucht es zunächst zu lesen und Führe Befehle aus / etc / profile und ~ / .profile in dieser Reihenfolge aus. Das Mit der Option --noprofile kann dieses Verhalten verhindert werden. Wenn als ein aufgerufen wird interactive shell mit dem Namen sh, bash sucht nach der Variable ENV, expandiert Wenn der Wert definiert ist, wird der Wert als Name einer Datei verwendet lesen und ausführen. Da eine Shell als sh aufgerufen wird, versucht sie nicht zu lesen und Ausführen von Befehlen aus anderen Startup-Dateien, die Option --rcfile hat keine bewirken. Eine nicht interaktive Shell, die mit dem Namen sh aufgerufen wird, versucht nicht lies andere Startup-Dateien. Wenn shash aufgerufen wird, tritt bash in den Posix-Modus ein nach dem Startup-Dateien werden gelesen.
Normalerweise konfiguriere ich nur ~/.bashrc
und ~/.bash_profile
Damit tramp korrekt funktioniert sieht es so aus, als ob ich meine .bash_profile
nach .profile
Hoffe, das hilft anderen.