我想来源一个从 Emacs 中更改环境变量的 shell 脚本。也就是说,我希望 shell 脚本能够更改 Emacs 运行的环境,并且我希望在正在运行的 Emacs 会话中执行此操作。
换句话说:
- 我从以下位置启动 Emacs
zsh
- 我想
zsh
从 Emacs 中获取一个脚本来更改环境变量,例如LD_LIBRARY_PATH
背景:
这是试图规避我所描述的问题这里,我需要的地方放 LD_LIBRARY_PATH
运行 Emacs,但我需要未设置它运行特定的Python发行版(蟒蛇)。
具体来说,我想使用 Emacs 包(emacs绝地)需要访问这个Python发行版,但目前我需要未设置 LD_LIBRARY_PATH
首先启动 Emacs,所以我需要放稍后我可以emacs-jedi
在 Emacs 中使用它。
这是可能吗?
答案1
我不认为这是可能的,因为每次调用子 shell 来获取脚本时,您都会从启动 emacs 应用程序的原始进程中调用子进程。
环境变量的导出是一种单向方式,只有父进程可以向任何子进程提供变量,但子进程不能操纵父进程的环境。
实验
我正在使用,vim
但同样应该适用于emacs
.源示例文件。
$ more ~/vars.bash
export VAR=somevalue
初始父环境
$VAR
未设置$ echo $VAR $
发射
vim
。然后调用子 shell 来获取上述文件 (:sh
)。# check variable $ echo $VAR $ # source and re-check $ source ~/vars.bash $ echo $VAR somevalue
退出子shell,返回vim。然后调用另一个子shell (
:sh
)。$ exit ... back in vim, do another `:sh` ... # check variable $ echo $VAR $
答案2
如果您只需要在加载 Emacs 后取消设置 LD_LIBRARY_PATH,只需添加
(setenv "LD_LIBRARY_PATH")
或~/.emacs
其他初始化文件。
如果需要来回交换,请先将结果保存(getenv "LD_LIBRARY_PATH")
在变量中,以便稍后恢复。
答案3
我发现了 Emacs lisp 的这个不错的部分,它用于比较采购前后命令diff
的输出,然后相应地调用函数:
export
setenv
https://gist.github.com/ffevotte/9345586