Attachez au shell distant en cours d'exécution avec eshell / TRAMP / dtach


11

J'utilise souvent GNU Screen pour garder les sessions distantes en vie. Depuis que je vis dans Emacs, j'aimerais vraiment pouvoir reprendre une session shell distante en cours d'exécution depuis Emacs.

GNU Screen implémente toutes sortes de choses fantaisistes comme le multiplexage de terminaux et le dessin de caractères dont je n'ai vraiment pas besoin. Je ne suis vraiment intéressé que par des sessions shell détachables et pouvant être reprises, donc quelque chose d'aussi simple que cela dtachpourrait suffire.

J'utilise cette fonction pour ouvrir une session SSH et me reconnecter à une dtachsession en cours d' exécution shell-mode(prise à partir d' ici ):

(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))))

Malgré des bizarreries mineures, cela fonctionne presque bien shell-mode, mais dans Eshell, cela ne fait que démarrer un sous-processus, de sorte que le terminal devient très limité (par exemple, aucune autocomplétion de chemin).

Comment puis-je configurer Eshell pour se connecter à une dtachsession en cours lors de la connexion à un serveur distant?

EDIT: En repensant à ce problème, je me suis rendu compte que ce que je voulais réellement n'était pas tout à fait clair. Voici une liste:

  • Je veux rester en eshell, pas dans un sous-processus
  • lors du rattachement, je souhaite que la sortie de la session distante soit rejouée et que l'historique des commandes distantes soit disponible
  • Je veux pouvoir interagir avec un processus distant en cours d'exécution (par exemple, une course en yum installattente de mon entrée)

Il semble que j'aurai besoin d'écrire un peu de code elisp pour que tout cela fonctionne avec dtach.


le mode shell interagit avec un processus shell, eshellEST le shell - donc conceptuellement il me semble que vous ne pouvez pas faire ce que vous voulez, sauf si vous accédez à un emacs en cours d'exécution avec un tampon eshell dans la session dtach. Ou je me trompe ici?
Tom Regner

Dans eshellles lignes entre ce qui est local et ce qui est distant et ce qui est une commande externe et une fonction elisp sont floues. Je voudrais le rendre encore plus flou de sorte que les processus d'exécution à distance puissent être interagis de manière transparente comme s'ils étaient locaux. Ce serait presque la même chose que de «reprendre» une session en cours, je pense.
rekado


@sds: courir screenà l' intérieur de shell-modene fonctionnera pas bien, car il screennécessite plus qu'un terminal stupide.
rekado

Réponses:


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.