Приєднайте до запущеної віддаленої оболонки за допомогою eshell / TRAMP / dtach


11

Я часто використовую екран GNU, щоб підтримувати віддалені сесії. Оскільки я живу в 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 це лише запускає підпроцес, тому термінал стає дуже обмеженим (наприклад, немає автозавершення шляху).

Як я можу налаштувати Eshell для підключення до запущеного dtachсеансу після підключення до віддаленого сервера?

EDIT: Коли я знову замислювався над цією проблемою, я зрозумів, що не зовсім зрозуміло, чого я насправді хочу. Ось список:

  • Я хочу залишитися в ешеллі, а не в якомусь підпроцесі
  • після повторного входження я хочу, щоб результат віддаленого сеансу був відтворений і історія віддалених команд була доступною
  • Я хочу мати можливість взаємодіяти з запущеним віддаленим процесом (наприклад, біг, який yum installчекає мого введення)

Здається, мені потрібно написати трохи коду elisp, щоб це все працювало з dtach.


режим оболонки взаємодіє з процесом оболонки, eshellIS оболонки - так що концептуально мені здається, ви не можете робити те, що хочете, якщо тільки ви не отримаєте доступ до запущених emacs з буфером eshell в сеансі dtach. Або я тут помиляюся?
Том Регнер

У eshellлініях між локальним і тим, що віддаленим, і зовнішньою командою та функцією elisp розмиті. Я хотів би зробити його ще більш нечітким, щоб віддалені запущені процеси можна було взаємодіяти прозоро, як ніби вони були локальними. Я думаю, це було б майже так само, як "відновлення" запущеної сесії.
rekado


@sds: запуск screenвсередині shell-modeне працюватиме добре, тому що screenпотрібен більше ніж німий термінал.
rekado

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.