我正在尝试通过Emacs的编译模式来编译u-boot,看来Emacs不知道如何找到bash环境变量。即使我设置了它们,并且可以通过Emacs shell仿真进行编译,但是编译模式仍会尝试编译它们,好像它们不存在一样。
我需要怎么做才能使其更具环境意识?
最佳答案
您可以尝试在.emacs
中添加类似内容:
(let ((path (shell-command-to-string ". ~/.bashrc; echo -n $PATH")))
(setenv "PATH" path)
(setq exec-path
(append
(split-string-and-unquote path ":")
exec-path)))
根据您是否在
.bash_profile
或.bashrc
中设置了env变量,您可能需要稍微调整一下此代码段。该示例是针对PATH
变量的,它有点特殊(因为您也必须在Emacs中设置exec-path
),但是可以扩展为适用于任意变量-您可以列出具有以下内容的变量:从.bashrc
读取并设置为Emacs。我不确定您使用的是OS X还是GNU / Linux。在Linux中从GUI的菜单栏中启动Emacs通常会导致Emacs与从命令行启动的Emacs没有相同的
PATH
。此问题可追溯到第一个xdm
Xsession脚本,并且它们很容易修复(基本上使用执行Xsessionwrapper
的exec $SHELL -c Xsession
脚本,因此外壳程序在运行用户的Xsession之前便已运行),但没有人愿意去做。在很长的时间内这样做(我怀疑有人会这样做)。据我所知,这个问题甚至存在于现代xdm后代中,例如kdm
和gdm
。在OS X上,处理env变量完全是另一个问题,要获取您的ENV变量,通常必须像这样
/Applications/Emacs.app/Contents/MacOS/Emacs
从命令行运行Emacs或使用~/.MacOSX/environment.plist
。我提供的代码段在两种情况下都应该涵盖您。更新资料
最近,exec-path-from-shell扩展使此过程变得更加容易。它以几乎相同的方式设置emacs
$PATH
,但是使用扩展通常比自己破解解决方案更可取。
关于emacs - 如何使Emacs识别要编译的bash环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663396/