eshell / TRAMP / dtach를 사용하여 실행중인 원격 쉘에 연결


11

나는 종종 원격 세션을 유지하기 위해 GNU Screen을 사용합니다. Emacs에 살고 있기 때문에 Emacs에서 실행중인 원격 쉘 세션을 재개 할 수 있기를 정말로 원합니다.

GNU Screen은 실제로 필요하지 않은 터미널 멀티플렉싱 및 문자 그리기와 같은 모든 종류의 멋진 것을 구현합니다. 나는 분리 가능하고 재개 가능한 셸 세션에만 관심 dtach이 있으므로 충분할 정도로 간단 합니다.

이 기능을 사용하여 SSH 세션을 열고 실행중인 dtach세션에 다시 연결합니다 shell-mode( here 에서 가져옴 ).

(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 코드를 작성해야 할 것 같습니다.


쉘 모드는 쉘 프로세스와 상호 작용하고 쉘은 eshellIS이므로 개념적으로 dtach 세션에서 eshell 버퍼로 실행중인 emacs에 액세스하지 않으면 원하는 것을 수행 할 수없는 것 같습니다. 아니면 내가 여기 착각합니까?
Tom Regner

에서는 eshell어떤 로컬 어떤 원격 어떤 외부 명령 및 elisp 함수가 흐리게을 사이 선. 원격 실행 프로세스가 마치 로컬 인 것처럼 투명하게 상호 작용할 수 있도록 더 어지럽게 만들고 싶습니다. 그것은 실행중인 세션을 "다시 시작하는"것과 거의 동일하다고 생각합니다.
rekado


@ sds : 멍청한 터미널 이상이 필요하기 때문에 screen내부 실행 shell-mode이 제대로 작동하지 않습니다 screen.
rekado

답변:


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.