使用eshell / TRAMP / dtach附加到运行中的远程Shell
我经常使用GNU Screen使远程会话保持活动状态。由于我住在Emacs中,因此我非常希望能够从Emacs中恢复正在运行的远程Shell会话。 GNU Screen实现了我真正不需要的各种奇特功能,例如终端多路复用和字符绘制。我真的只对拥有可分离和可恢复的shell会话感兴趣,所以简单的事情dtach就足够了。 我正在使用此功能来打开SSH会话并重新连接到的运行dtach会话shell-mode(从此处获取): (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)))) 尽管有一些小怪癖,但这对于几乎可以用shell-mode,但是在Eshell中,这仅启动了一个子进程,因此终端变得非常有限(例如,没有路径自动完成)。 dtach连接到远程服务器后,如何配置Eshell以连接到正在运行的会话? 编辑: 当我再次考虑这个问题时,我意识到尚不清楚我真正想要的是什么。清单: 我想留在eshell中,而不是在某些子过程中 重新连接后,我希望重播远程会话的输出并且远程命令历史记录可用 我希望能够与正在运行的远程进程进行交互(例如正在yum install等待我的输入) 看来我需要编写一些elisp代码才能使所有这些与dtach一起使用。