Führen Sie die Anwendung in cwd auf dem Remote-Host in eshell aus


12

Ich verwende Eshell oft, um eine Verbindung zu Remote-Systemen herzustellen. Auf diesen Remote-Systemen möchte ich manchmal Skripte im aktuellen Arbeitsverzeichnis ausführen. In einem normalen Terminal würde ich Folgendes eingeben:

./my-script.sh

In Eshell funktioniert dies leider nicht:

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

Es funktioniert nur, wenn ich den vollständigen TRAMP-Pfad zum Skript bereitstelle:

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

Gibt es eine Möglichkeit, Eshell davon zu überzeugen, .automatisch zu erweitern , sodass der einfachere Aufruf nur funktioniert?

Als Workaround verwende ich derzeit eine an diese Funktion gebundene Funktion, C-c .die den aktuellen vollständigen Pfad in die Befehlszeile einfügt. Ich hätte mich viel lieber .so verhalten wie erwartet.

Antworten:


11

Das sieht aus wie ein Bug in eshell, du solltest es melden.

Ich denke, Sie können es beheben

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

Unterm Strich ist das Problem, dass tramp am Ende eine Remote-Befehlszeile des Formulars erstellt (ich entferne einige Escapezeichen, um es klarer zu machen):

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

Aus diesem Grund erhalten Sie am Ende diese "mysteriöse" Botschaft über env

Was stattdessen generiert werden muss (und das wird durch den obigen Befehl erreicht), ist ungefähr so

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

Ich glaube jedoch, dass der Fehler auf der Eshell-Seite liegt, da Tramp nicht wissen kann, dass "/ ssh: remote1: ..." kein gültiger Remote-Befehl ist (obwohl wir wahrscheinlich viel mehr haben würden, wenn dies der Fall wäre) Probleme mit Multi-Hop-Tramp ... aber sowieso). Und eshell tut in der Tat das Vernünftige, wenn es sich bei dem Befehl ausdrücklich um einen Tramppfad handelt.


Funktioniert reibungslos. Danke für diese Lösung.
Boccaperta-IT

1
Es ist in der Tat ein Fehler und wurde bereits im Upstream behoben.
Rekado

@rekado, in welcher Version von Emacs ist das behoben?
Djhaskin987

Ich glaube, es wurde mit diesem Commit behoben
rekado

Ich bin auf diesen Fehler gestoßen und musste den obigen Fix anwenden (der das Problem behebt - danke dafür). Ich verwende Emacs 24.5.1, das über Homebrew auf einem Mac installiert wurde. Das Upstream-Update behebt das Problem für mich nicht.
Butala
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.