我正在尝试通过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
中设置了环境变量,你可能需要稍微调整这段代码。这个例子是针对PATH
变量的,它有点特别(因为你还必须在Emacs中设置exec-path
),但可以扩展到适用于任意变量 - 你可以有一个变量列表,必须从.bashrc
读取并设置到Emacs中。PATH
。这个问题可以追溯到第一个xdm
Xsession脚本,虽然它们很容易修复(基本上使用一个Xsessionwrapper
脚本,执行exec $SHELL -c Xsession
,以便在运行用户的Xsession之前运行shell),但很长一段时间以来没有人费心去解决它(我怀疑也不会有人)。据我所知,这个问题甚至存在于现代的xdm后代(如kdm
和gdm
)中。/Applications/Emacs.app/Contents/MacOS/Emacs
,或者尝试一下~/.MacOSX/environment.plist
。不过,我提供的代码段应该适用于这两种情况。$PATH
,但使用扩展通常比自己进行修改更可取。这里是启动emacs
进程的环境变量:
您似乎假设emacs是从bash会话启动的。然而,通常在X下启动的进程是从sh会话启动的,这将不会读取您在~/.bashrc脚本中设置的环境变量。一个简单的方法是更改您的~/.xinitrc文件以使用bash而不是sh(可以在文件顶部添加#!/bin/bash)。— Command: getenv var
This function returns the value of the environment variable var, as a string. var should be a string. If var is undefined in the environment, getenv returns nil. It returns ‘""’ if var is set but null. Within Emacs, a list of environment variables and their values is kept in the variable process-environment.
(getenv "USER") ⇒ "lewis"
— Variable: process-environment
This variable is a list of strings, each describing one environment variable. The functions getenv and setenv work by means of this variable.
process-environment ⇒ ("PATH=/usr/local/bin:/usr/bin:/bin" "USER=lewis" "TERM=xterm" "SHELL=/bin/bash" "HOME=/home/lewis" ...)
#!/bin/bash
? - Eleno这并不是严格回答你的问题,但你总可以在make
命令行中传递环境变量。例如:M-xcompile
RETmake -k CXXFLAGS='-Wall'
RET
wrong type argument stringp nil
错误。 - kikulikov