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