2014-10-29 22 views
8

Tôi có sau trong emacs của tôi:TRAMP lờ đi lang thang-xa-path

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

nên khi tôi mở một file sử dụng tramp qua ssh, tôi hy vọng tôi PATH chứa /some/path. Thay vào đó, chạy M-! echo $PATH lợi nhuận

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

Thậm chí nếu tôi đặt export PATH=/hwdisks/data/modules/pkg/git/1.8.4.1/bin/git:$PATH trong .bashrc hoặc .profile, PATH không được thiết lập một cách chính xác.

Trong nhật ký đường xó chợ, *debug tramp/ssh remotehost*, tôi có thể nhìn thấy một cách rõ ràng tramp thiết PATH:

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

Nếu tôi bao gồm echo "in .bashrc" trong .bashrc của tôi, nó xuất hiện trong bản ghi tramp, vì vậy tôi biết tramp đang đọc nó.

Tôi làm cách nào để làm cho tramp sử dụng đúng PATH?

Emacs phiên bản: 24.2.1
Tramp phiên bản: 2.2.3-24.1

Trả lời

6

xấu hổ, câu trả lời là trong cuốn hướng dẫn tramp:

Một khả năng khác là sử dụng lại các thiết lập con đường của bạn tài khoản từ xa khi bạn đăng nhập. Thông thường, các cài đặt này bị ghi đè, vì chúng có thể không hữu ích cho việc truy cập. Trình giữ chỗ tramp-own-remote-path giữ nguyên các thiết lập này. Bạn có thể kích hoạt nó thông qua

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

Tôi vẫn không chắc chắn lý do tại sao nó bỏ qua những con đường khác thêm vào tramp-remote-path.

3

Tôi đọc tài liệu này trong hướng dẫn sử dụng và thử nó. Added

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

Sau đó thoát emacs, loại bỏ ~/.emacs.d/tramp, và khởi động lại như được giải thích here

Nhưng M-! echo $PATH vẫn cho thấy giá trị của tramp-default-remote-path thay vì giá trị thiết lập trong .bashrc tôi.

Vấn đề có vẻ là sự hiểu biết của tôi về cách tải hồ sơ. Cách tramp gọi là vỏ xa để có được những PATH từ xa:

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

Kể từ bash là cuộc gọi như vỏ đăng nhập và làm /bin/sh nó đọc .profile thay vì .bash_profile hoặc .bashrc.

Tôi thấy điều này trong bash trang hướng dẫn:

Nếu bash được gọi với tên sh, nó cố gắng bắt chước các hành vi khởi động của phiên bản lịch sử của sh càng sát càng tốt, trong khi phù hợp với các POSIX tiêu chuẩn là tốt.Khi được gọi là shell đăng nhập tương tác hoặc shell không tương tác với tùy chọn --login, trước tiên nó cố gắng đọc và thực thi lệnh từ/etc/profile và ~/.profile, theo thứ tự đó. Tùy chọn --noprofile có thể được sử dụng để ngăn chặn hành vi này. Khi được gọi là một vỏ tương tác với tên sh, bash tìm biến ENV, mở rộng giá trị của nó nếu nó được xác định và sử dụng giá trị được mở rộng làm tên của tệp để đọc và thực thi. Vì một trình bao được gọi là sh không cố đọc và thực hiện các lệnh từ bất kỳ tệp khởi động nào khác, tùy chọn --rcfile không có hiệu lực . Một hệ vỏ không tương tác được gọi với tên sh không cố gắng để đọc bất kỳ tệp khởi động nào khác. Khi được gọi là sh, bash sẽ chuyển sang chế độ posix sau khi các tệp khởi động được đọc.

Tôi thường cấu hình chỉ ~/.bashrc~/.bash_profile Đối tramp để hoạt động đúng trông giống như tôi nên di chuyển của tôi .bash_profile-.profile

Hy vọng điều này giúp những người khác.

  • GNU Emacs: 25.0.94.2 Tramp: 2.2.13.25.1
Các vấn đề liên quan