2014-10-29 12 views
8

ich folgendes in meiner .emacs haben:TRAMP ignoriert tramp-remote-Pfad

(require 'tramp) 
(add-to-list 'tramp-remote-path "/some/path") 
(add-to-list 'tramp-remote-path 'tramp-default-remote-path) 

so, wenn ich eine Datei mit Getrampel über ssh zu öffnen, ich erwarte, dass meine PATH/some/path enthalten. Stattdessen läuft M-! echo $PATH kehrt

/bin:/usr/bin:/usr/sbin:/usr/local/bin 

Auch wenn ich gesetzt export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATH in .bashrc oder .profile wird PATH nicht richtig eingestellt.

Im tramp Protokoll *debug tramp/ssh remotehost*, kann ich explizit sehen tramp PATH Einstellung:

12:28:34.202135 tramp-send-command (6) # PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin; export PATH 

Wenn ich schließe echo "in .bashrc" in meinen .bashrc, es erscheint im Trampprotokoll, damit ich weiß, tramp es liest.

Wie kann ich Tramp verwenden die richtige PATH?

Emacs Version: 24.2.1
Tramp Version: 2.2.3-24.1

Antwort

6

Peinlich, ist die Antwort im Tramp Handbuch:

Eine andere Möglichkeit ist die Pfadeinstellungen Ihres wiederzuverwenden Remote-Konto, wenn Sie sich anmelden. Normalerweise werden diese Einstellungen überschrieben, da sie für Tramps möglicherweise nicht nützlich sind. Der Platzhalter tramp-own-remote-path behält diese Einstellungen bei. Sie können es aktivieren über

(add-to-list 'tramp-remote-path 'tramp-own-remote-path) 

Ich bin immer noch nicht sicher, warum es die anderen Wege zu tramp-remote-path hinzugefügt ignoriert.

3

Ich las dies in Tramp Handbuch und versuchte es. Added

(add-to-list 'tramp-remote-path 'tramp-own-remote-path) 

verlassen Dann Emacs, entfernt ~/.emacs.d/tramp und neu gestartet als here erklärt

Aber M-! echo $PATH noch zeigt der Wert von tramp-default-remote-path anstelle des in meinem .bashrc eingestellten Wert.

Das Problem scheint zu verstehen, wie die Profile geladen werden. Die Art und Weise Tramp ruft die Remote-Shell den Remote-Pfad zu erhalten:

/bin/sh -l -c 'echo $PATH' 
/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin 

Da bash Anruf als Login-Shell ist und wie /bin/sh liest es .profile statt .bash_profile oder .bashrc.

ich dies in bash Manpage:

Wenn bash mit dem Namen sh aufgerufen wird, versucht es das Startverhalten von historischen Versionen von sh so nah wie möglich zu imitieren, während auf die konformen POSIX-Standard auch.Wenn sie als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, versucht sie zuerst, Befehle aus/etc/profile und ~/.profile in dieser Reihenfolge auszuführen. Die Option --noprofile kann verwendet werden, um dieses Verhalten zu verhindern. Wenn sie als interaktive Shell mit dem Namen sh aufgerufen wird, sucht bash nach der Variablen ENV, erweitert ihren Wert , wenn sie definiert ist, und verwendet den erweiterten Wert als Name einer Datei zum Lesen und Ausführen. Da eine Shell aufgerufen wird, während sh nicht versucht, Befehle aus allen anderen Startdateien zu lesen und auszuführen, hat die Option --rcfile keinen Effekt . Eine nicht interaktive Shell, die mit dem Namen sh aufgerufen wird, versucht nicht, andere Startdateien zu lesen. Wenn shash aufgerufen wird, tritt die bash in den Posix-Modus ein, nachdem die Startup-Dateien gelesen wurden.

ich konfigurieren in der Regel nur ~/.bashrc und ~/.bash_profile Für tramp richtig funktioniert sieht aus wie ich sollte meine .bash_profile-.profile

hoffe, das hilft anderen bewegen.

  • GNU Emacs: 25.0.94.2 Tramp: 2.2.13.25.1