Đính kèm để chạy shell từ xa với eshell / TRAMP / dtach


11

Tôi thường sử dụng GNU Screen để duy trì các phiên từ xa. Vì tôi sống ở Emacs, tôi thực sự muốn có thể tiếp tục một phiên shell từ xa đang chạy từ bên trong Emacs.

GNU Screen thực hiện tất cả các loại điều thú vị như ghép kênh đầu cuối và vẽ ký tự mà tôi thực sự không cần. Tôi thực sự chỉ quan tâm đến việc có các phiên shell có thể tháo rời và có thể phục hồi, vì vậy một cái gì đó đơn giản như dtachcó thể là đủ.

Tôi đang sử dụng chức năng này để mở phiên SSH và kết nối lại với dtachphiên đang chạy shell-mode(lấy từ đây ):

(defun ssh-dtach (host)
  "Open SSH connection to remote host and attach to dtach session."
  (interactive)
  (let ((explicit-shell-file-name "dtach")
        (explicit-dtach-args '("-A" "/tmp/emacs.dtach" "-z"
                               "/bin/bash" "--noediting" "-login"))
        (default-directory (format  "/ssh:%s:" host)))
    (shell (format "*ssh %s*" host))))

Mặc dù các yêu cầu nhỏ, điều này hoạt động gần như tốt shell-mode, nhưng trong Eshell, điều này chỉ bắt đầu một quy trình con, vì vậy thiết bị đầu cuối trở nên rất hạn chế (ví dụ không có tự động hoàn thành đường dẫn).

Làm cách nào tôi có thể định cấu hình Eshell để kết nối với dtachphiên đang chạy khi kết nối với máy chủ từ xa?

EDIT: Khi tôi nghĩ về vấn đề này một lần nữa, tôi nhận ra rằng nó không hoàn toàn rõ ràng những gì tôi thực sự muốn. Đây là danh sách:

  • Tôi muốn ở lại eshell, không phải trong một số quy trình con
  • khi gắn lại tôi muốn đầu ra của phiên từ xa được phát lại và lịch sử lệnh từ xa sẽ khả dụng
  • Tôi muốn có thể tương tác với một quy trình từ xa đang chạy (ví dụ: đang chạy yum installchờ đầu vào của tôi)

Có vẻ như tôi sẽ cần phải viết một chút mã elisp để làm cho tất cả hoạt động với dtach.


Chế độ shell tương tác với một quá trình shell, eshellIS shell - vì vậy về mặt khái niệm, dường như tôi không thể làm những gì bạn muốn, trừ khi bạn truy cập một emacs đang chạy với bộ đệm eshell trong phiên dtach. Hay tôi nhầm ở đây?
Tom Regner

Trong eshellcác dòng giữa những gì là cục bộ và những gì là từ xa và một lệnh bên ngoài và một chức năng elisp được làm mờ. Tôi muốn làm cho nó thậm chí còn mờ hơn để các quy trình chạy từ xa có thể được tương tác trong suốt như thể chúng là cục bộ. Điều đó sẽ gần giống như "nối lại" một phiên chạy, tôi nghĩ vậy.
rekado


@sds: chạy screenbên trong shell-modesẽ không hoạt động tốt, vì screencần nhiều hơn một thiết bị đầu cuối câm.
rekado

Câu trả lời:


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.