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ư dtach
có 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 dtach
phiê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 dtach
phiê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 install
chờ đầ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.
eshell
cá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.
screen
bên trong shell-mode
sẽ không hoạt động tốt, vì screen
cần nhiều hơn một thiết bị đầu cuối câm.
eshell
IS 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?