6

在我的外壳中,我做到了:export BLA=foo然后我做到了echo $BLA,我看到foo了预期的结果。然后我加载 emacs 并执行M-!一个 shell 命令并执行echo $BLA它并将其设置为其他内容,bar. 所以然后我运行M-x setenv并给出它BLAfoo在提示下但是当我做回声时我仍然看到bar。为什么会这样,我该如何改变它?我正在尝试对一些我想在其下运行的环境变量执行此操作M-x compile

4

2 回答 2

10

setenv设置值后,将为emacs 启动的进程修改环境。正在运行的子进程不会受到影响。

因此,执行(setenv "FOO" "bar")and then M-x shell(假设您还没有运行的 shell)将生成一个环境变量“FOO”设置为“bar”的 shell。

于 2013-07-03T15:16:13.637 回答
2

您在其中启动 Emacs 的 shell 将其环境的副本移交给其子进程(Emacs),这就是值从 shell 传输到 Emacs 的方式。Emacs 随后对其继承的环境执行的任何更改都只会影响 Emacs 进程的环境。Emacs 的环境无法影响 shell 的环境。

如果您需要将信息返回给 shell,则必须使用不同的技术,例如临时文件、命名管道、套接字……</p>

如果你只是想检查 Emacs 本身的环境,使用M-x getenv查看变量,或者使用M-! echo $BLA. 如果这也显示其他内容,那么您可能有一个特殊BLA的,在每个命令之后自动设置为 sth,或者根本不可写RANDOM或类似。

于 2013-07-03T14:31:17.603 回答