Guscio remoto aperto direttamente con tramp in emacs


5

Trovo che la cosa migliore per far girare le mie shell in macchine remote in emacs sia l'uso di TRAMP (usando il ssh il comando in una shell locale non funziona per i miei bisogni). Tuttavia, so solo come eseguire una shell TRAMP se prima visita un file remoto con C-x C-f e poi fallo M-x shell da quel buffer Tuttavia, vorrei aprire una shell in una macchina remota, usando TRAMP, prima aprire qualsiasi file su quell'host remoto, ma non riesce a trovare alcuna spiegazione su come farlo nelle mie ricerche. è possibile farlo?


Per favore aggiungi alcune spiegazioni aggiuntive su ciò che stai cercando. Chiaramente, sei più avanzato di voler solo sapere come ssh in una macchina remota da un buffer di shell, ma questa è la direzione che la tua domanda conduce al lettore. Quindi, vuoi avere una funzione per aprire un buffer di shell e automaticamente ssh nel tuo computer remoto - in modo tale che ti trovi su un prompt e un percorso sul server remoto? Oppure vuoi che un buffer in modalità shell sia già aperto e poi premi semplicemente un comando di login automatico? Usi sshpass? Preferiresti inserire la tua password ogni volta?
lawlist

Grazie @lawlist! Ho riformulato la domanda nella speranza che sia più chiaro. Per rispondere alle tue domande: Voglio un modo che mi permetta di fare in modo che Tramp apra un buffer di shell remoto in una macchina che specifichi. Il comportamento previsto è che emacs richiede la mia password quando provo a farlo.
jmlorenzi

Risposte:


4

Il vagabondo entra in gioco quando la directory predefinita è remota. Quindi potresti cambiarlo, come fai con l'apertura di un file remoto (o directory) in anticipo.

Ma potresti scrivere un piccolo comando come questo:

(defun my-shell () (interactive) (let ((default-directory "/ssh:user@host:")) (shell)))

Quindi puoi chiamare M-x my-shell


1
Se emacs funziona su Windows e vuoi accedere a un host Linux, puoi impostare con M-x customize-variable explicit-shell-file-name a \bin\bash per evitare errori di shell mancanti.
kwarnke

2

Io uso dired per accedere alla macchina remota e aprire una shell lì.

Ecco la funzione che uso, preso e modificato da Configurazione di Emacs di Tikhon Jelviss :

(defun anr-shell (buffer)
  "Opens a new shell buffer where the given buffer is located."
  (interactive "sBuffer: ")
  (pop-to-buffer (concat "*" buffer "*"))
  (unless (eq major-mode 'shell-mode)
    (dired buffer)
    (shell buffer)
    (sleep-for 0 200)
    (delete-region (point-min) (point-max))
    (comint-simple-send (get-buffer-process (current-buffer)) 
                        (concat "export PS1=\"\033[33m" buffer "\033[0m:\033[35m\\W\033[0m>\""))))

Esempio:

(anr-shell "/vagrant@localhost#2222:/vagrant/")

Si prega di ripubblicare la risposta qui, in quanto i collegamenti alla risposta effettiva sono scoraggiati per evitare il marciume del link
Jarmund

La risposta è stata ripubblicata.
mandark

Il voto è cambiato di conseguenza.
Jarmund

0

Sebbene non sia reso troppo chiaro nel manuale C-u M-x shell ti permette di specificare il nome del buffer di shell, e più importante nel tuo caso ti permette di specificare il Default directory, che può prendere una stringa come Tramp /ssh:server:/my/path.

Un'alternativa è aprire dired ( C-x d ) piuttosto che un file reale, se tu M-x shell dalla directory, la shell si apre con il contesto della directory dired.

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.