【发布时间】:2010-12-02 22:15:01
【问题描述】:
在 emacs 中,我可以交互地做这样的事情:
M-x eshell
cd /sudo:privileged@myserver:
/path/to/mycommand
这一切都很愉快,但我真的很希望能够在 elisp 代码中做这样的事情,作为自动化平凡任务的函数的一部分:
(shell-command "/sudo:privileged@myserver:/path/to/mycommand")
这不太行。显然 shell-command 试图找到路径 /sudo:privileged@myserver: 并且可以理解地抱怨。
是否有一种机制可以让我以编程方式在远程服务器上运行任意命令?我知道,在紧要关头,我可以求助于调用`(shell-command "ssh privileged@myserver /path/to/mycommand")。不幸的是,由于我所在的网络怪癖,我在某种程度上依赖于 tramp 多跳代理功能,因此从 tramp 执行此操作似乎更简单。
我查看了 tramp.el 以了解他们如何实现他们的 tramp-handle-shell-command 拦截器,但看起来他们没有考虑这种情况,或者我可能需要欺骗它使用先右缓冲。我有哪些选择?
(我使用的是 GNU Emacs,而不是 xemacs,以防万一)。
【问题讨论】:
-
(eshell-command "pushd /sudo:privileged@myserver:;/path/to/mycommand;popd") 基本上是我最终使用的。 (shell 命令不处理 cd 或 pushd/popd 到流浪者路径)。谢谢,加雷斯。