eshell内からリモートホスト上のcwdでアプリケーションを実行する


12

私はよくEshellを使用してリモートシステムに接続します。それらのリモートシステムでは、現在の作業ディレクトリでスクリプトを実行したいことがあります。通常の端末では、次のように入力します。

./my-script.sh

残念ながら、Eshellの内部ではこれは機能しません。

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

スクリプトへの完全なTRAMPパスを指定した場合にのみ機能します。

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

.単純な呼び出しが機能するように、Eshellに自動的に展開させる方法はありますか?

回避策として、現在バインドされC-c .ている関数を使用して、コマンドラインに現在のフルパスを挿入します。.期待どおりに動作することを望んでいます。

回答:


11

これはのバグのように見えるeshellので、報告する必要があります。

修正できると思います

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

要するに、問題はtrampがフォームのリモートコマンドラインを構築することになるということです(わかりやすくするためにエスケープを削除しています)。

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

だからこそ、あなたはその「神秘的な」メッセージで終わるのです env

代わりに生成する必要があるのは(上記のコマンドによって達成されることです)次のようなものです

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

ただし、「/ ssh:remote1:...」が有効なリモートコマンドではないことをtrampが認識する方法がないため、バグはeshell側にあると考えています(そうであったとしても、おそらくもっとたくさんあるはずです)マルチホップトランプの問題...とにかく)。そして、コマンドが明示的にトランプパスである場合、eshellは実際に正しいことを行います。


スムーズに動作します。この解決策をありがとう。
ボッカペルタ-IT

1
これは確かにバグであり、すでにアップストリームで修正されています。
レカド

@rekado、修正されたemacsのバージョンは?
djhaskin987

私は、それがこのコミットで固定したと信じて:git.savannah.gnu.org/cgit/emacs.git/commit/...を
rekado

私はこのバグに遭遇し、上記の修正を適用する必要がありました(これにより問題が修正されました---ありがとうございます)。Macでhomebrew経由でインストールされたemacs 24.5.1を実行しています。アップストリームの修正では、問題は修正されません。
ブタラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.