在我的shell中,我做了export BLA=foo
,然后我echo $BLA
,我看到foo
正如预期的那样。然后我加载emacs并为M-!
执行shell命令并执行echo $BLA
并将其设置为其他内容bar
。然后我运行M-x setenv
并在提示时给它BLA
和foo
但是当我做回声时我仍然看到bar
。为什么会这样,我怎么能改变它?我正在尝试为我想运行M-x compile
答案 0 :(得分:6)
setenv
将修改emacs启动之后设置值的流程环境。运行子进程不会受到影响。
因此,执行(setenv "FOO" "bar")
然后M-x shell
(假设您尚未运行shell)将生成一个环境变量“FOO”设置为“bar”的shell。
答案 1 :(得分:1)
您启动Emacs的shell将其环境的副本移交给其子进程(Emacs),该值是如何将值从shell传输到Emacs的。 Emacs随后对其继承环境执行的任何更改都只会影响Emacs进程的环境。 Emacs的环境无法影响shell的环境。
如果您需要将信息传递回shell,您必须使用不同的技术,如临时文件,命名管道,套接字,......
如果您只想查看Emacs本身的环境,请使用M-x
getenv
查看变量,或使用M-!
echo $BLA
。如果这也显示为其他,那么你可能有一个特殊的BLA
,它会在每个命令后自动设置为sth,或者不像RANDOM
或类似的那样可写。