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.