eshell / TRAMP / dtachで実行中のリモートシェルに接続する


11

私はしばしば、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コードを記述する必要があるようです。


shell-modeはシェルプロセスであるeshellIS シェルと対話します。つまり、概念的には、dtachセッションでeshellバッファーを使用して実行中のemacsにアクセスしない限り、望んだことを実行できないようです。または私はここで間違っていますか?
Tom Regner、2014年

eshellどのローカルであり、どのような遠隔であり、どのような外部コマンドとelispの機能がぼやけされている間の線。リモートの実行中のプロセスがローカルであるかのように透過的に対話できるように、さらにファジーにしたいと思います。それは、実行中のセッションを「再開」することとほぼ同じだと思います。
rekado 2014年


@sds:screen内部での実行は、ダム端末以上のものを必要shell-modeとするため、うまく機能しませんscreen
rekado 2014年

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.