PATH和exec-path设置,但emacs找不到可执行文件

时间:2011-12-22 16:35:45

标签: emacs dot-emacs

我的.emacs包含

(setenv "PATH" (concat ".:/usr/texbin:/opt/local/bin" (getenv "PATH")))
(setq exec-path (append exec-path '(".:/usr/texbin:/opt/local/bin")))

(add-to-list 'load-path "/usr/local/share/emacs/site-lisp")
(require 'tex-site)
(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)

/ usr / texbin是latex / pdflatex / ..所在的位置。 / opt / local / bin /是可以找到gs的地方。

然而,当我运行预览时,显然需要乳胶和gs,我得到了

Preview-DviPS finished at Thu Dec 22 11:25:46
DviPS sentinel: Searching for program: No such file or directory, gs

这意味着乳胶可以找到,但不是gs。

我不确定是否需要设置exec-path,也许PATH就足够了,但我已将其设置为调试措施。

为什么emacs找不到gs,即使它所在的目录是在PATH和exec路径中?

4 个答案:

答案 0 :(得分:62)

如果您在Emacs中设置了$PATH,那么您很可能使用的是OS X. GUI应用程序不是通过shell启动的,因此它们会看到不同的环境变量。

这是一个技巧,我用它来确保Emacs中的$PATH与我看到的相同,如果我启动一个终端(但看到下面的“更新”):

(defun set-exec-path-from-shell-PATH ()
  "Set up Emacs' `exec-path' and PATH environment variable to match that used by the user's shell.

This is particularly useful under Mac OSX, where GUI apps are not started from a shell."
  (interactive)
  (let ((path-from-shell (replace-regexp-in-string "[ \t\n]*$" "" (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'"))))
    (setenv "PATH" path-from-shell)
    (setq exec-path (split-string path-from-shell path-separator))))

然后只需从您的Emacs init文件中调用set-exec-path-from-shell-PATH函数即可。我保留了代码on github,BTW。

更新:此代码现已改进并作为名为exec-path-from-shell的elisp库发布;可安装的软件包在MELPA

中提供

答案 1 :(得分:11)

尝试用这个替换第二行:

(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin")))

答案 2 :(得分:1)

我遇到了类似的问题,但是路径正确,包括尾随':'。结果发现内部emacs shell程序丢失了,导致“搜索程序:没有这样的文件或目录”消息。 用

修复
(setq shell-file-name "bash").

答案 3 :(得分:-3)

您的路径字符串末尾似乎缺少路径分隔符: