从 Emacs 中获取 shell 脚本

Jos*_*osh 5 shell emacs shell-script

我想采购一个shell脚本,改变在Emacs我的环境变量。也就是说,我希望 shell 脚本更改 Emacs 运行的环境,并且我希望在正在运行的 Emacs 会话中执行此操作。

换句话说:

  1. 我从 Emacs 开始 zsh
  2. 我想zsh从 Emacs 中获取一个脚本来更改环境变量,例如LD_LIBRARY_PATH

背景:

这是试图规避我在此处描述的问题,我需要设置 LD_LIBRARY_PATH运行 Emacs,但我需要取消设置以运行特定的 Python 发行版 ( Anaconda )。

具体来说,我想使用需要访问此 Python 发行版的 Emacs 包 ( emacs-jedi ),但目前我需要先取消设置 LD_LIBRARY_PATH才能启动 Emacs,所以我需要稍后设置它,以便我可以emacs-jedi在 Emacs 中使用。

这是可能吗?

slm*_*slm 4

我不认为这是可能的,因为每次调用子 shell 来获取脚本时,您都会从启动 emacs 应用程序的原始进程中调用子进程。

环境变量的导出是一种单向方式,只有父进程可以向任何子进程提供变量,但子进程不能操纵父进程的环境。

实验

我正在使用vim,但同样应该适用于emacs. 源示例文件。

$ more ~/vars.bash 
export VAR=somevalue
Run Code Online (Sandbox Code Playgroud)
  1. 初始父环境$VAR未设置

    $ echo $VAR
    
    $
    
    Run Code Online (Sandbox Code Playgroud)
  2. 发射vim。然后调用子 shell 来获取上述文件 ( :sh)。

    # check variable
    $ echo $VAR
    
    $
    
    # source and re-check
    $ source ~/vars.bash
    $ echo $VAR
    somevalue
    
    Run Code Online (Sandbox Code Playgroud)
  3. 退出子shell,返回vim。然后调用另一个子shell ( :sh)。

    $ exit
    
    ... back in vim, do another `:sh` ...
    
    # check variable
    $ echo $VAR
    
    $ 
    
    Run Code Online (Sandbox Code Playgroud)