Jam*_*yke 13 ruby macos emacs rvm
我正在尝试在我的Mac OS X系统上使用特定的ruby版本运行编译命令(rake cucumber),我使用rvm在终端中执行此操作.我的〜/ .MacOSX/environment.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))
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
我不希望/ usr/bin和其他人在前面,我希望我的路径首先和emacs前置路径到底,我认为这将解决我的问题.
我通过简单地打开Aquamacs并运行meta-x compile
然后测试它echo $PATH
.
有任何想法吗?
Mar*_*ann 10
每个人似乎都误解了原始问题:路径已在Emacs中正确设置,并且正确的路径已经传递给由compile命令启动的shell!什么给出了什么?这是答案:
在MacOS X中,有一个名为的小工具path_helper(1)
.它默认调用,由/etc/profile
shell启动时由Bash执行.当您从Emacs开始编译时,它会启动一个shell(默认情况下是MacOS X上的Bash),因此执行此path_helper
工具.关键点在于:path_helper
重新排列路径,移动标准目录,就像/usr/bin
在自定义添加目录前一样,无论您最初添加它们的位置如何.通过打开一个shell并首先查看PATH是什么来自己尝试一下,然后执行/usr/lib/path_helper
并查看生成的PATH!
对你的蛮力解决方案可能是简单地调用注释掉path_helper
在/etc/profile
.但请注意,然后您将不会自动获取/etc/paths.d
设置中的路径path_helper
,这是工具的主要目的.
sanityinc对解决方案的一个小修改(在上面的评论中找不到输入它的方法 - 只是我吗?)
-l
shell的选项强制登录shell(读取.profile
或.bash_profile
),而不是交互式shell(只读取.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))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5431 次 |
最近记录: |