Ejecute la aplicación en cwd en un host remoto desde eshell


12

A menudo uso Eshell para conectarme a sistemas remotos. En esos sistemas remotos, a veces quiero ejecutar scripts en el directorio de trabajo actual. En una terminal normal, escribiría esto:

./my-script.sh

Desafortunadamente, dentro de Eshell esto no funcionará:

~ $ cd /remote1:~
/ssh:remote1:/home/rekado $ ./my-script.sh 
env: /ssh:remote1:/home/rekado/my-script.sh: No such file or directory
/ssh:remote1:/home/rekado $ 

Solo funciona si proporciono la ruta TRAMP completa al script:

/ssh:remote1:/home/rekado $ /ssh:remote1:/home/rekado/my-script.sh 
It works!
/ssh:remote1:/home/rekado $ 

¿Hay alguna manera de convencer a Eshell para que se expanda .automáticamente de modo que la invocación más simple simplemente funcione?

Como solución alternativa, actualmente utilizo una función vinculada a C-c .que inserta la ruta completa actual en la línea de comando. Prefiero que me .comporte como se esperaba.

Respuestas:


11

Parece un error eshell, deberías informarlo.

Yo creo que se puede arreglar por

(defadvice eshell-gather-process-output (before absolute-cmd (command args) act)
  (setq command (file-truename command)))

En pocas palabras, el problema es que vagabundo termina construyendo una línea de comando remota del formulario (estoy eliminando algunos escapes para hacerlo más claro):

cd /home/rekado && exec env PS1='/ssh:remote1:/home/rekado $' /ssh:remote1:/home/rekado/my-script.sh

Es por eso que terminas con ese mensaje "misterioso" sobre env

Lo que necesita generar en su lugar (y eso es lo que se logra con el comando anterior) es algo así como

cd /home/rekado && exec env PS1='/ssh:remote1:/home/rekado $' /home/rekado/my-script.sh

Sin embargo, creo que el error está en el lado eshell, ya que vagabundo no tiene forma de saber que "/ ssh: remote1: ..." no es un comando remoto válido (aunque si lo fuera, probablemente tendríamos mucho más) problemas con el vagabundo de múltiples saltos ... pero de todos modos). Y eshell realmente hace lo correcto cuando el comando es explícitamente una ruta de vagabundo.


Funciona sin problemas Gracias por esta solución
Boccaperta-IT

1
De hecho, es un error y ya se ha corregido en sentido ascendente.
rekado

@rekado, ¿en qué versión de emacs está arreglado?
djhaskin987

Creo que se solucionó con este commit: git.savannah.gnu.org/cgit/emacs.git/commit/…
rekado

Encontré este error y tuve que aplicar la corrección anterior (que corrige el problema --- gracias por eso). Estoy ejecutando emacs 24.5.1 instalado a través de homebrew en una Mac. La solución aguas arriba no corrige el problema para mí.
butala
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.