【问题标题】:How to actually change/set environment variables from within emacs如何从 emacs 中实际更改/设置环境变量
【发布时间】:2013-07-03 14:20:39
【问题描述】:

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

【问题讨论】:

    标签: linux bash emacs environment-variables


    【解决方案1】:

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

    因此,执行(setenv "FOO" "bar"),然后执行M-x shell(前提是您还没有正在运行的shell)将生成一个环境变量“FOO”设置为“bar”的shell。

    【讨论】:

    • C-u M-x shell 将提示输入缓冲区名称,这具有轻松启动第二、第三等外壳窗口的效果。在 setenv 之前和之后尝试 shell 并查看结果!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我真的很喜欢您在 The Emacs 中提到 Emacs 的方式。我要采用这个约定
    • Emacs 被描述为一个怪异的怪物,所以术语 »Emacs« 应该被视为一个规范而不是名称,因此是 »The Emacs«。
    猜你喜欢
    • 2013-01-20
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 2019-07-02
    相关资源
    最近更新 更多