Abra directamente el shell remoto con vagabundo en emacs

6

Creo que lo mejor para ejecutar mis shells en máquinas remotas en emacs es usar TRAMP (usar el sshcomando en un shell local no funciona para mis necesidades). Sin embargo, solo sé cómo ejecutar un shell TRAMP si primero visito un archivo remoto C-x C-fy luego lo hago M-x shelldesde ese búfer. Sin embargo, me gustaría abrir un shell en una máquina remota, usando TRAMP, antes de abrir cualquier archivo en ese host remoto, pero no puedo encontrar ninguna explicación sobre cómo hacerlo en mis búsquedas. ¿Es posible hacer eso?

jmlorenzi
fuente
Agregue alguna explicación adicional de lo que está buscando. Claramente, usted es más avanzado que solo querer saber cómo ingresar a una máquina remota desde un búfer de shell, pero esa es la dirección que su pregunta lleva al lector. Entonces, ¿desea que una función abra un búfer de shell y ssh automáticamente en su máquina remota, para que se encuentre en un indicador y ruta en el servidor remoto? O, ¿desea que un búfer en modo shell ya esté abierto y luego simplemente presione un comando de inicio de sesión automático? ¿Usas sshpass? ¿Prefieres ingresar tu contraseña cada vez?
ley
Gracias @lawlist! Reformulé la pregunta con la esperanza de que sea más clara. Para responder a sus preguntas: Quiero alguna forma que me permita abrir un búfer de shell remoto en una máquina que especifique. El comportamiento esperado es que emacs me pide mi contraseña cuando intento hacer esto.
jmlorenzi

Respuestas:

5

Vagabundo entra en juego, cuando el directorio predeterminado es remoto. Por lo tanto, puede cambiarlo, como lo hace al abrir un archivo remoto (o directorio) de antemano.

Pero podrías escribir un pequeño comando como este:

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

Entonces puedes llamar M-x my-shell

Michael Albinus
fuente
1
Si Emacs se ejecuta en Windows y desea iniciar sesión en un servidor Linux, podría configurar con M-x customize-variable explicit-shell-file-namea \bin\bashpara evitar perder los errores de concha.
kwarnke
@Michael Albinus He aplicado esa my-shellfunción. Se construye con éxito una conexión TRAMP de mi portátil con Windows 7 a mi computadora Mac, pero después de que salga con env: C:/msys64/usr/bin/bash.exe: No such file or directory exitCreo que es debido a que en mi .emacs tramp-encoding-shellse establece en C:/msys64/usr/bin/bash.exeSi sólo se pude cambiar el valor tramp-encoding-shella /bin/bashque creo que iba a salir bien. ¿Cómo hacerlo sin problemas? Gracias.
Romario
Como siempre, podrías atarlo. Al igual ... (let ((default-directory "/ssh:user@host:")(tramp-encoding-shell "/bin/bash")) (shell))). No he probado esto, aunque.
Michael Albinus
2

Utilizo dired para acceder a la máquina remota y abrir un shell allí.

Aquí está la función que uso, tomada y modificada de la configuración de emacs de 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>\""))))

Ejemplo:

(anr-shell "/vagrant@localhost#2222:/vagrant/")
mandark
fuente
Vuelva a publicar la respuesta aquí, ya que se desalienta los enlaces a la respuesta real para evitar la pudrición del enlace
Jarmund
La respuesta ha sido reenviada.
mandark
El voto cambió en consecuencia.
Jarmund
0

Aunque no se deja demasiado claro en el manual, le C-u M-x shellpermite especificar el nombre del búfer de shell, y lo más importante en su caso, le permite especificar el Default directory, que puede tomar una cadena al igual que Tramp /ssh:server:/my/path.

Una alternativa es abrir dired ( C-x d) en lugar de un archivo real, si M-x shelldesde el directorio, el shell se abre con el contexto del directorio dired.

Phil
fuente
0

Aquí hay otro enfoque:

  1. M-x cd para cambiar el directorio predeterminado del búfer al directorio remoto deseado
  2. invocar M-x shell, que abrirá un shell en la máquina remota
marca
fuente