我试图得到一个编译命令(瑞克黄瓜)运行与特定的红宝石上我的Mac OS X系统,我使用的功能要做到这一目前在终端。我~/.MacOSX/环境。plist具有正确的道路,但emacs坚持加上这条道路,并因此使它无用的。我也试过:

(when (equal system-type 'darwin)
  (setenv "PATH" (concat "/Users/fearoffish/.rvm/bin:/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin:/Users/fearoffish/.rvm/bin"))
  (push "/Users/fearoffish/.rvm/bin" exec-path)
  (push "/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin" exec-path)
  (push "/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin" exec-path)
  (push "/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin" exec-path)
  (push "/Users/fearoffish/.rvm/bin" exec-path))

这是绝望的尝试的一个emacs初级得到我想要的。它的 仍然 前面添加在它前面,所以我的道路,结束正:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fearoffish/.rvm/bin:/Users/fearoffish/.rvm/rubies/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249/bin:/Users/fearoffish/.rvm/gems/ruby-1.8.7-p249%global/bin

我不想要的/usr/bin和前添加其他人,我想 路径的第一和emacs前面的道路是结束时,我认为,这将解决我的问题。

我测试这只需开口Aquamacs和运行 meta-x compile 然后 echo $PATH.

任何想法?

有帮助吗?

解决方案

一个小的修改,以解决由sanityinc(找不到的方式进入其中的上述评论--这些只是我?)

  • 我用 -l 选择壳强制登录的外壳(其中读取 .profile.bash_profile),而不是一个互动的外壳(只读 .bashrc).
  • 我做了一些串修剪在返回的路径(如检查出一个新行偷偷)。

修改编:

(defun set-exec-path-from-shell-PATH ()
  (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))))
(when (equal system-type 'darwin) (set-exec-path-from-shell-PATH))

其他提示

每个人似乎误解了原来的问题:路径已正确设置在Emacs,和正确的路径已经被传递给所有由编译命令启动的shell!那么是什么原因?下面是答案:

在MacOS X的,有一个被称为path_helper(1)小工具。它是由/etc/profile,这是对的Bash shell启动执行默认调用。当你开始从Emacs的汇编,它会启动一个shell(默认为猛砸在MacOS X),因此执行该path_helper工具。这里谈到的关键点:path_helper重新排列你的路径的,移动的标准目录,如/usr/bin在您的自定义添加目录,前面不管你最初加入他们。通过打开壳可以先看看我们在走什么路是自己试用,然后执行/usr/lib/path_helper和具有看看生成的路径!

你的蛮力解决方案可能是简单地注释掉呼叫path_helper/etc/profile。但是请注意,那么你就不会自动/etc/paths.d得到path_helper设置的路径,这是该工具的主要目的。

我没有一台Mac,所以我不能直接测试,但是这都可以在* *信息页面的交互式下壳

当你开始在Emacs一个壳,其被衍生过程是在Emacs的可变explicit-shell-file-name程序(和如果是nil,环境变量ESHELLSHELL被使用)。

据然后发送~/.emacs_*shellname*的内容(例如,如果你的shell是csh,然后~/.emacs_csh会送过来。另外,csh程序中的相应文件.RC其来源,所以你可以更新,以及(在我的情况.cshrc )。此外,还可以包装在rc文件定制与用于环境变量INSIDE_EMACS(这其中的Emacs设置它运行一个壳)之前的检查。

您需要更新这些文件,以改变外壳,而不是Emacs的变量exec-path路径。 exec-path - 这仅仅是一个目录列表的的Emacs 的用于查找可执行程序。该可执行文件的行为不受改变exec-path

我觉得在Mac上的environment.plist方案很丑陋,所以我用下面的代码片段,你想Emacs的使用您在Terminal.app看到相同的路径即假设:

(defun set-exec-path-from-shell-PATH ()
  (let ((path-from-shell (shell-command-to-string "$SHELL -i -c 'echo $PATH'")))
    (setenv "PATH" path-from-shell)
    (setq exec-path (split-string path-from-shell path-separator))))

(这在Emacs 23对我的作品;还没有尝试过其他的版本,但是我希望它的工作)

也许试试这个。与你的替换路径串。

(添加到列表“负载路径 “〜/选择/斯旺克-的Clojure / SRC / emacs的”)

我观察到据时,Emacs采取的路径从可变它从推出的外壳,所以一个解决办法是改变$ PATH在壳在启动之前的Emacs

我使用的一个其它方法,这是更灵活,是使用生成文件,并附加在每个前面的“源〜/ script_that_set_path”使你有命令。

我已经尝试了许多不同的方法来这一点,结束了不使用emacs设置我的编译命令环境。

我现在要做的就是创建一个简单的初始化一个干净的环境run_helper.sh文件,然后使用exec $*执行作为参数传递给run_helper.sh命令

run_helper.sh通常是项目的具体,但我一直,我用它来开始,当我创建一个新项目的模板。

然后,从像compile例如emacs的我简单运行bash run_helper.sh rspec path/to/tests

如果我使用它来运行红宝石测试,帮助我的初始化RVM使用适当的红宝石和宝石。如果我使用其他语言,可能只是出口所需的环境变量或执行一些其他初始化,但这样一来,我可以在bash脚本做到这一点,而不是总用emacs的路径elisp的每一次很乱,我开始一个新项目。

这里的一个run_helper.sh文件的一个例子

#!/bin/bash

cd /Users/simao/Documents/sp

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

source "$HOME/.rvm/scripts/rvm" # This loads the proper ruby and gemset from .rvmrc

export RAILS_ENV=test

exec $*

这也使得我的测试运行得更快,因为我有很多的东西在我的.zshrc,我不希望只加载运行一些测试。

这工作对我来说有两件事情。

首先,我接着sanityinc建议

  

代码段的改进和修改版本现在公布为elisp的文库称为EXEC - 路径 - 从壳;安装的包可在果酱和Melpa

我仍然有与编译指令的问题。 Valko Sipuli是正确的有涉及path_helper的问题。

我评论在/ etc /简档的相应行,并没有帮助。问题仍然存在。 我不使用bash,但zsh中。挖一点,我发现在/ etc / zshenv。此文件还调用path_helper。

在评论的path_helper部分后的/ etc / zshenv我的路径是最后正确

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top