Exécuter l'application dans CWD sur un hôte distant à partir d'Eshell


12

J'utilise souvent Eshell pour me connecter à des systèmes distants. Sur ces systèmes distants, je souhaite parfois exécuter des scripts dans le répertoire de travail actuel. Dans un terminal ordinaire, je tape ceci:

./my-script.sh

Malheureusement, à l'intérieur d'Eshell, cela ne fonctionnera pas:

~ $ 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 $ 

Cela ne fonctionne que si je fournis le chemin TRAMP complet du script:

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

Existe-t-il un moyen de convaincre Eshell de se développer .automatiquement de sorte que l'invocation plus simple fonctionne?

Pour contourner ce problème, j'utilise actuellement une fonction liée à C-c .celle qui insère le chemin d'accès complet actuel sur la ligne de commande. Je préférerais de loin .me comporter comme prévu.

Réponses:


11

Cela ressemble à un bogue eshell, vous devez le signaler.

Je pense que vous pouvez y remédier en

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

En bout de ligne, le problème est que Tramp finit par construire une ligne de commande à distance du formulaire (je supprime certains échappements pour le rendre plus clair):

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

C'est pourquoi vous vous retrouvez avec ce message "mystérieux" sur env

Ce qu'il doit générer à la place (et c'est ce qui est réalisé par la commande ci-dessus) est quelque chose comme

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

Je pense que le bug est du côté eshell, car tramp n'a aucun moyen de savoir que "/ ssh: remote1: ..." n'est pas une commande à distance valide (bien que si c'était le cas, nous en aurions probablement beaucoup plus problèmes avec le tramp multi-hop ... mais de toute façon). Et eshell fait en effet la chose saine lorsque la commande est explicitement un chemin clochard.


Fonctionne en douceur. Merci pour cette solution.
— Boccaperta-IT

1
C'est un bug en effet et a déjà été corrigé en amont.
— rekado

@rekado, dans quelle version d'emacs est-il corrigé?
— djhaskin987

Je crois qu'il a été corrigé avec ce commit: git.savannah.gnu.org/cgit/emacs.git/commit/…
— rekado

J'ai rencontré ce bogue et j'ai dû appliquer le correctif ci-dessus (qui corrige le problème --- merci pour cela). J'utilise emacs 24.5.1 installé via homebrew sur un mac. Le correctif en amont ne résout pas le problème pour moi.
— butala
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.