Emacs:尝试使用tramp连接到远程主机时找不到uname

时间:2013-03-20 18:05:07

标签: emacs elisp tramp

我正在使用emacs 24.3 on OSX并且使用tramp连接到远程主机时遇到了一些麻烦。每次我尝试连接时都会收到以下错误:

Tramp: Opening connection for root@foo.example.com using ssh...
Tramp: Sending command `exec ssh -l root  -e none foo.example.com'

Tramp: Waiting for prompts from remote shell
Tramp: Sending command `exec ssh -l root  -e none foo.example.com'
Tramp: Found remote shell prompt on `foo.example.com'
Tramp: Opening connection for root@foo.example.com using ssh...done
byte-code: `echo \"`uname -sr`\"' does not return a valid Lisp expression: `sh: uname: command not found

此实例中的远程主机是较旧的Fedora安装,并且/bin/uname处存在uname。我也遇到了与Ubuntu 12.10机器相同的错误,所以我不认为这是远程主机的问题。我尝试了很多不同的东西,包括设置值tramp-remote-path无济于事。我当前与tramp相关的配置如下:

(require 'tramp)
(setq tramp-default-method "ssh")
(add-to-list 'tramp-remote-path "/bin")
(add-to-list 'tramp-remote-path "/usr/bin")
(add-to-list 'tramp-remote-path "/usr/local/bin")

我很感激任何指示或帮助。感谢。

2 个答案:

答案 0 :(得分:1)

在我的情况下,此问题是由更改了shell设置的.emacs中的杂散设置引起的。如果您已经积累了很多设置,我强烈建议您从头开始,而不是尝试调试.emacs文件。首先确保您可以通过emacs之外的ssh与您的主机联系。一旦工作,运行

% emacs -q

从没有配置文件开始。在emacs内部,执行

(require 'tramp)

并尝试在远程主机上打开文件

C-xC-f /your-host-name:/path/on/your/host/file.name

如果这样可行,就像它对我一样,太棒了!现在你可以弄清楚.emacs中的问题是什么导致了事情的破坏。查找与子shell或tramp配置变量相关的任何内容,并从那里开始工作。

如果事情仍然存在,请尝试为tramp添加更多诊断

(setq tramp-debug-buffer t)
(setq tramp-verbose 10)

并检查输出缓冲区。特别是,试着弄清楚你是否到达了远程主机,或者是在客户端绊倒了什么。

答案 1 :(得分:1)

在我的情况下,我调用了这个函数,我在emacs中添加了执行乳胶的东西

(defun set-exec-path-from-shell-PATH ()
  "Sets the exec-path to the same value used by the user shell"
  (let ((path-from-shell
         (replace-regexp-in-string
          "[[:space:]\n]*$" ""
          (shell-command-to-string "$SHELL -l -c 'echo $PATH'"))))
    (setenv "PATH" path-from-shell)
    (setq exec-path (split-string path-from-shell path-separator))))

在玩了我的shell和自制软件之后我破坏了一些东西而且我得到了你描述的错误,所以最后我删除了这个功能,现在我只是为我的路径配置了以下配置

(setenv "PATH" (concat (getenv "PATH") ":/bin"))
(setq exec-path (append exec-path '("/bin")))