Chạy ứng dụng trong cwd trên máy chủ từ xa từ bên trong eshell


12

Tôi thường sử dụng Eshell để kết nối với các hệ thống từ xa. Trên các hệ thống từ xa đó, đôi khi tôi muốn chạy các tập lệnh trong thư mục làm việc hiện tại. Trong một thiết bị đầu cuối thông thường tôi sẽ gõ này:

./my-script.sh

Thật không may, bên trong Eshell điều này sẽ không hoạt động:

~ $ cd /remote1:~
/ssh:remote1:/home/rekado $ ./my-script.sh 
env: /ssh:remote1:/home/rekado/my-script.sh: No such file or directory
/ssh:remote1:/home/rekado $ 

Nó chỉ hoạt động nếu tôi cung cấp đường dẫn TRAMP hoàn chỉnh cho tập lệnh:

/ssh:remote1:/home/rekado $ /ssh:remote1:/home/rekado/my-script.sh 
It works!
/ssh:remote1:/home/rekado $ 

Có cách nào để thuyết phục Eshell mở rộng .tự động sao cho việc gọi đơn giản hơn chỉ hoạt động?

Như một cách giải quyết, tôi hiện đang sử dụng một hàm bị ràng buộc để C-c .chèn đường dẫn đầy đủ hiện tại vào dòng lệnh. Tôi rất muốn được .cư xử như mong đợi.

Câu trả lời:


11

Trông giống như một lỗi trong eshell, bạn nên báo cáo nó.

Tôi nghĩ bạn có thể sửa nó bằng cách

(defadvice eshell-gather-process-output (before absolute-cmd (command args) act)
  (setq command (file-truename command)))

Điểm mấu chốt, vấn đề là tramp kết thúc việc xây dựng một dòng lệnh từ xa của biểu mẫu (Tôi đang xóa một số lối thoát để làm cho nó rõ ràng hơn):

cd /home/rekado && exec env PS1='/ssh:remote1:/home/rekado $' /ssh:remote1:/home/rekado/my-script.sh

Đó là lý do tại sao bạn kết thúc với thông điệp "bí ẩn" đó về env

Những gì nó cần để tạo thay thế (và đó là những gì đạt được bằng lệnh trên) là một cái gì đó như

cd /home/rekado && exec env PS1='/ssh:remote1:/home/rekado $' /home/rekado/my-script.sh

Tôi thực sự tin rằng lỗi nằm ở phía eshell, vì tramp không có cách nào để biết rằng "/ ssh: remote1: ..." không phải là một lệnh từ xa hợp lệ (mặc dù nếu vậy, có lẽ chúng ta sẽ có nhiều hơn nữa các vấn đề với tramp multi-hop ... nhưng dù sao đi nữa). Và eshell thực sự làm điều lành mạnh khi lệnh rõ ràng là một đường dẫn.


Hoạt động trơn tru. Cảm ơn giải pháp này.
Boccaperta-IT

1
Đây thực sự là một lỗi và đã được sửa chữa ngược dòng.
rekado

@rekado, phiên bản nào của emacs được sửa trong?
djhaskin987

Tôi tin rằng nó đã được sửa với cam kết này: git.savannah.gnu.org/cgit/emacs.git/commit/ ám
rekado

Tôi gặp phải lỗi này và phải áp dụng cách khắc phục ở trên (khắc phục sự cố --- cảm ơn bạn vì điều đó). Tôi đang chạy emacs 24.5.1 được cài đặt qua homebrew trên máy mac. Sửa lỗi ngược dòng không khắc phục vấn đề cho tôi.
butala
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.