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 dtach
mungkin sudah cukup.
Saya menggunakan fungsi ini untuk membuka sesi SSH dan menyambung kembali ke dtach
sesi 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-mode
keanehan 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 dtach
sesi 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 install
menunggu input saya)
Tampaknya saya harus menulis sedikit kode elisp untuk membuat ini semua berfungsi dengan dtach.
eshell
garis 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.
screen
di dalam shell-mode
tidak akan berfungsi dengan baik, karena screen
membutuhkan lebih dari terminal bodoh.
eshell
IS 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?