eshell / TRAMP / dtachで実行中のリモートシェルに接続する
私はしばしば、GNU Screenを使用して、リモートセッションを存続させます。私はEmacsに住んでいるので、実行中のリモートシェルセッションをEmacs内から再開できるようにしたいと思っています。 GNU Screenは、端末の多重化や文字の描画など、私が本当に必要としないあらゆる種類の凝ったものを実装しています。私は本当に取り外し可能で再開可能なシェルセッションにのみ興味があるので、単純なもの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、入力を待っている実行中)と対話できるようにしたい これをすべてdtachで機能させるには、少しのelispコードを記述する必要があるようです。