2014-10-29 12 views
8

Ho il seguente nei miei .emacs:TRAMP ignora vagabondo-remote-path

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

così quando apro un file usando vagabondo tramite ssh, mi aspetto il mio PATH per contenere /some/path. Invece, in esecuzione M-! echo $PATH rendimenti

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

Anche se ho impostato export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATH in .bashrc o .profile, PATH non è impostato correttamente.

Nel registro vagabondo, *debug tramp/ssh remotehost*, posso vedere vagabondo impostando esplicitamente PATH:

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

Se includo echo "in .bashrc" nel mio .bashrc, esso viene visualizzato nel registro vagabondo, quindi so vagabondo sta leggendo.

Come posso fare in modo che il vagabondo usi il PATH corretto? Versione

Emacs: versione 24.2.1
Tramp: 2.2.3-24.1

risposta

6

imbarazzante, la risposta è nel manuale vagabondo:

Un'altra possibilità è quella di riutilizzare le impostazioni del percorso del vostro account remoto quando si accede. Di solito, queste impostazioni vengono sovrascritte, perché potrebbero non essere utili per il tramp. Il segnaposto tramp-own-remote-path conserva queste impostazioni. È possibile attivarlo tramite

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

io non sono ancora sicuro perché ignora gli altri percorsi aggiunti tramp-remote-path.

3

Ho letto questo in manuale di vagabondo e provato. aggiunte

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

Poi esce emacs, rimosso ~/.emacs.d/tramp, e riavviato come spiegato here

Ma M-! echo $PATH mostra ancora il valore di tramp-default-remote-path anziché il valore impostato nel mio .bashrc.

Il problema sembra essere la mia comprensione di come vengono caricati i profili. Il vagabondo modo chiama la shell remota per ottenere il percorso remoto:

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

Poiché bash è chiamata come shell di login e come /bin/sh legge .profile anziché .bash_profile o .bashrc.

Ho trovato questo in bash pagina di manuale:

Se bash è invocata col nome sh, si cerca di imitare il comportamento di avvio di versione storica di sh il più fedelmente possibile, mentre conforme al Anche lo standard POSIX.Quando viene invocato come shell di login interattiva o una shell non interattiva con l'opzione --login, tenta innanzitutto di leggere e comandi da/etc/profile e ~/.profile, in questo ordine. L'opzione --noprofile può essere utilizzata per inibire questo comportamento. Quando invocato come shell interattiva con il nome sh, bash cerca la variabile ENV, espande il valore se è definito e utilizza il valore espanso come nome di un file da leggere ed eseguire. Poiché una shell richiamata come sh non tenta di leggere e esegue comandi da qualsiasi altro file di avvio, l'opzione --rcfile non ha l'effetto . Una shell non interattiva invocata con il nome sh non tenta di leggere altri file di avvio. Quando invocato come sh, bash entra in modalità posix dopo la lettura dei file di avvio.

Io di solito configurare solo ~/.bashrc e ~/.bash_profile Per vagabondo corretto funzionamento assomiglia dovrei spostare il mio .bash_profile-.profile

Spero che questo aiuta gli altri.

  • GNU Emacs: 25.0.94.2 Tramp: 2.2.13.25.1