Collegalo alla shell remota in esecuzione con eshell / TRAMP / dtach


11

Uso spesso lo schermo GNU per mantenere attive le sessioni remote. Dal momento che vivo in Emacs, mi piacerebbe davvero poter riprendere una sessione di shell remota in esecuzione all'interno di Emacs.

Lo schermo GNU implementa ogni sorta di cose fantasiose come il multiplexing terminale e il disegno dei personaggi di cui non ho davvero bisogno. Sono davvero interessato solo ad avere sessioni di shell staccabili e ripristinabili, quindi qualcosa di semplice come dtachpotrebbe essere sufficiente.

Sto usando questa funzione per aprire una sessione SSH e riconnettermi a una dtachsessione in esecuzione shell-mode(presa da qui ):

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

Nonostante le piccole stranezze, questo funziona quasi bene shell-mode, ma in Eshell questo avvia solo un sottoprocesso, quindi il terminale diventa molto limitato (ad esempio nessun completamento automatico del percorso).

Come posso configurare Eshell per connettersi a una dtachsessione in esecuzione al momento della connessione a un server remoto?

EDIT: Mentre ripensavo a questo problema, mi sono reso conto che non è del tutto chiaro quello che voglio davvero. Ecco un elenco:

  • Voglio rimanere in eshell, non in alcuni sottoprocessi
  • dopo il ricollegamento, desidero riprodurre l'output della sessione remota e rendere disponibile la cronologia dei comandi remoti
  • Voglio essere in grado di interagire con un processo remoto in esecuzione (ad esempio una corsa in yum installattesa del mio input)

Sembra che dovrò scrivere un po 'di codice elisp per far funzionare tutto con dtach.


shell-mode interagisce con un processo di shell, eshellÈ la shell - quindi concettualmente mi sembra che tu non possa fare quello che vuoi, a meno che tu non acceda ad un emacs in esecuzione con un buffer eshell nella sessione dtach. O mi sbaglio qui?
Tom Regner,

Le eshelllinee tra ciò che è locale e ciò che è remoto e ciò che è un comando esterno e una funzione elisp sono sfocate. Vorrei renderlo ancora più fuzzato in modo tale che i processi in esecuzione remoti possano interagire in modo trasparente come se fossero locali. Sarebbe quasi lo stesso di "riprendere" una sessione di corsa, credo.
rekado,


@sds: correre screenall'interno di shell-modenon funzionerà bene, perché ha screenbisogno di più di un terminale stupido.
rekado,

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.