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.