2014-10-29 24 views
8

Mam następujący w moim .emacs:TRAMP ignoruje trampowa pilota-path

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

więc podczas otwierania pliku przy użyciu tramp przez SSH, spodziewam moim PATH zawierać /some/path. Zamiast tego, działa M-! echo $PATH powraca

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

Nawet jeśli ustawić export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATH w .bashrc lub .profile, PATH nie są ustawione poprawnie.

W dzienniku Tramp, *debug tramp/ssh remotehost*, widzę wyraźnie tramp ustawienia PATH:

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

Gdybym to echo "in .bashrc" w moim .bashrc, pojawia się w dzienniku tramp, więc wiem tramp czyta go.

W jaki sposób mogę sprawić, aby tramp używał poprawnej PATH? Wersja

Emacs: wersja 24.2.1
Tramp: 2.2.3-24.1

Odpowiedz

6

żenująco, odpowiedź jest w instrukcji tramp:

Inną możliwością jest wykorzystanie ustawienia ścieżka do zdalne konto po zalogowaniu. Zazwyczaj te ustawienia są nadpisywane, ponieważ mogą nie być przydatne do pobierania. Uchwyt miejsca tramp-own-remote-path zachowuje te ustawienia. Można ją aktywować poprzez

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

ja nadal nie jestem pewien, dlaczego ignoruje inne ścieżki dodane do tramp-remote-path.

3

Przeczytałem to w podręczniku trampowym i wypróbowałem. Dodany

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

Potem wyszedł emacs, usunięto ~/.emacs.d/tramp i wznowiona jak wyjaśniono here

Ale M-! echo $PATH nadal pokazuje wartość tramp-default-remote-path zamiast wartości ustawionej w moim .bashrc.

Problem polega na tym, że rozumiem sposób ładowania profili. Sposób tramp wywołuje zdalną powłokę, aby uzyskać zdalny PATH:

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

Od bash to wezwanie jako powłokę logowania i jako /bin/sh odczytuje .profile zamiast .bash_profile lub .bashrc.

Znalazłem to w bash ręcznego stronie:

Jeżeli bash wywoływany jest pod nazwą sh, próbuje naśladować zachowanie startowe historycznymi wersjami sh tak ściśle, jak to możliwe, przy zgodnym z Również standard POSIX.Po wywołaniu jako interaktywna powłoka logowania lub nieinteraktywna powłoka z opcją --login, najpierw próbuje odczytać i wykonać polecenia z/etc/profile i ~/.profile, w tej kolejności. Do powstrzymania tego zachowania można użyć opcji - noprofile. Po wywołaniu jako interaktywna powłoka o nazwie sh, bash szuka zmiennej ENV, rozszerza swoją wartość, jeśli jest zdefiniowana, i używa rozszerzonej wartości jako nazwy pliku do odczytu i wykonania. Ponieważ powłoka wywoływana jako sh nie próbuje odczytać i wykonuje polecenia z innych plików startowych, opcja --rcfile nie ma efektu . Nieinteraktywna powłoka wywoływana pod nazwą sh nie próbuje odczytać żadnych innych plików startowych. Po wywołaniu jako sh, bash wchodzi w tryb posix po odczytaniu plików startowych.

zwykle skonfigurować tylko ~/.bashrc i ~/.bash_profile Dla tramp działał prawidłowo wygląda powinienem przenieść .bash_profile do .profile

nadzieję, że to pomaga innym.

  • GNU Emacs: 25.0.94.2 Tramp: 2.2.13.25.1