如何从emacs中实际更改/设置环境变量

时间:2013-07-03 14:20:40

标签: linux bash emacs environment-variables

在我的shell中,我做了export BLA=foo,然后我echo $BLA,我看到foo正如预期的那样。然后我加载emacs并为M-!执行shell命令并执行echo $BLA并将其设置为其他内容bar。然后我运行M-x setenv并在提示时给它BLAfoo但是当我做回声时我仍然看到bar。为什么会这样,我怎么能改变它?我正在尝试为我想运行M-x compile

的一些环境变量执行此操作

2 个答案:

答案 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或类似的那样可写。