从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 .该函数的函数在命令行上插入当前的完整路径。我更希望.表现得像预期的那样。

Answers:


11

看起来好像是中的错误eshell,您应该报告它。

你可以通过解决

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

归根结底,问题在于流浪汉最终构造了一种形式的远程命令行(我正在删除一些转义符以使其更清晰):

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

我确实相信该错误在eshell方面,因为流浪汉无法知道“ / ssh:remote1:...”不是有效的远程命令(尽管如果这样,我们可能还有很多其他东西)多跳流浪汉的问题...但无论如何)。当命令显式为流浪者路径时,eshell确实可以做明智的事情。


工作顺利。感谢您的解决方案。
Boccaperta-IT 2014年

1
这确实是一个错误,并且已经在上游修复。
rekado

@rekado,它修复了哪个版本的emacs?
djhaskin987 2015年

我认为它是固定与此承诺:git.savannah.gnu.org/cgit/emacs.git/commit/...
rekado

我遇到了此错误,必须应用以上修复程序(它可以解决问题---谢谢您)。我正在运行通过自制软件在Mac上安装的emacs 24.5.1。上游修复程序无法为我解决问题。
butala 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.