Lampirkan untuk menjalankan shell jarak jauh dengan eshell / TRAMP / dtach


11

Saya sering menggunakan Layar GNU untuk menjaga sesi remote tetap hidup. Karena saya tinggal di Emacs, saya benar-benar ingin dapat melanjutkan sesi shell yang sedang berjalan dari dalam Emacs.

Layar GNU mengimplementasikan semua hal mewah seperti terminal multiplexing dan menggambar karakter yang benar-benar tidak saya butuhkan. Saya benar-benar hanya tertarik memiliki sesi shell yang bisa dilepas dan dibuka kembali, jadi sesuatu yang sesederhana dtachmungkin sudah cukup.

Saya menggunakan fungsi ini untuk membuka sesi SSH dan menyambung kembali ke dtachsesi yang sedang berjalan shell-mode(diambil dari sini ):

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

Meskipun ada beberapa shell-modekeanehan kecil, ini bekerja dengan baik , tetapi di Eshell ini baru memulai subproses, sehingga terminal menjadi sangat terbatas (mis. Tidak ada penyelesaian otomatis jalur).

Bagaimana saya bisa mengkonfigurasi Eshell untuk terhubung ke dtachsesi yang sedang berjalan saat menghubungkan ke server jarak jauh?

EDIT: Ketika saya memikirkan masalah ini lagi, saya menyadari bahwa tidak sepenuhnya jelas apa yang sebenarnya saya inginkan. Berikut daftarnya:

  • Saya ingin tetap di eshell, bukan di beberapa proses
  • setelah pemasangan kembali saya ingin output dari sesi jauh akan diputar ulang dan sejarah perintah jarak jauh akan tersedia
  • Saya ingin dapat berinteraksi dengan proses yang berjalan jarak jauh (misalnya berlari yum installmenunggu input saya)

Tampaknya saya harus menulis sedikit kode elisp untuk membuat ini semua berfungsi dengan dtach.


shell-mode berinteraksi dengan proses shell, eshellIS shell - jadi secara konseptual menurut saya Anda tidak dapat melakukan apa yang Anda inginkan, kecuali jika Anda mengakses emacs yang sedang berjalan dengan buffer eshell di sesi dtach. Atau saya salah di sini?
Tom Regner

Di eshellgaris antara apa yang lokal dan apa yang jauh dan apa yang merupakan perintah eksternal dan fungsi elisp kabur. Saya ingin membuatnya lebih fuzzier sehingga proses yang berjalan jarak jauh dapat berinteraksi dengan transparan seolah-olah mereka lokal. Itu hampir sama dengan "melanjutkan" sesi lari, saya pikir.
rekado


@ds: berjalan screendi dalam shell-modetidak akan berfungsi dengan baik, karena screenmembutuhkan lebih dari terminal bodoh.
rekado

Jawaban:


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.