Uzak oturumları canlı tutmak için genellikle GNU Ekranı kullanırım. Emacs'ta yaşadığımdan beri, Emacs içinden çalışan bir uzak kabuk oturumuna devam edebilmek istiyorum.
GNU Screen, gerçekten ihtiyaç duymadığım terminal çoğullama ve karakter çizimi gibi her türlü fantezi şeyi uygular. Gerçekten sadece çıkarılabilir ve devam ettirilebilir kabuk oturumlarına sahip olmakla ilgileniyorum, bu yüzden dtach
yeterli kadar basit bir şey .
Bir SSH oturumu açmak ve ( buradan alınır ) çalışan bir dtach
oturuma yeniden bağlanmak için bu işlevi kullanıyorum :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))))
Küçük tuhaflıklara rağmen, bu neredeyse iyi çalışıyor shell-mode
, ancak Eshell'de bu sadece bir alt işlem başlatıyor, bu nedenle terminal çok sınırlı hale geliyor (örn. Yol otomatik tamamlama yok).
Eshell'i dtach
uzak bir sunucuya bağlandıktan sonra çalışan bir oturuma bağlanacak şekilde nasıl yapılandırabilirim ?
EDIT: Bu sorunu tekrar düşündüğüm gibi, aslında ne istediğimi tamamen açık olmadığını fark ettim. İşte bir liste:
- Eshell'de kalmak istiyorum, bazı alt süreçlerde değil
- yeniden taktıktan sonra uzak oturumun çıktısının yeniden oynatılmasını ve uzak komut geçmişinin kullanılabilir olmasını istiyorum
- Çalışan uzak bir işlemle etkileşime girmek istiyorum (örneğin, girdimi
yum install
bekleyen bir çalışan )
Tüm bu dtach ile çalışmak için elisp kodu biraz yazmak gerekecek gibi görünüyor.
eshell
ne yerel ve ne uzak ve ne bir dış komutu ve bir elisp fonksiyondur bulanıklaştırıldığı arasındaki çizgileri. Uzaktan çalışan süreçlerin yerelmiş gibi şeffaf bir şekilde etkileşime girebileceği şekilde daha da bulanık hale getirmek istiyorum. Sanırım, bu, koşu seansına "devam etmek" ile neredeyse aynı olurdu.
screen
içinde koşmak shell-mode
iyi çalışmaz, çünkü screen
aptal bir terminalden daha fazlasına ihtiyaç duyar.
eshell
IS - bu yüzden kavramsal olarak bana dtach oturumunda bir eshell arabelleği olan çalışan bir emacs erişmediğiniz sürece istediğinizi yapamazsınız. Yoksa burada yanıldım mı?