私はしたいと思いますソースEmacs 内から環境変数を変更するシェル スクリプト。つまり、シェル スクリプトを使用して Emacs が実行される環境を変更し、実行中の Emacs セッション内からこれを実行したいのです。
言い換えると:
- Emacsを起動すると
zsh
zsh
Emacs内から環境変数を変更するスクリプトをソースにしたいのですが、LD_LIBRARY_PATH
背景:
これは私が説明した問題を回避するための試みであるここ、必要なところでセット LD_LIBRARY_PATH
Emacsを実行するには、設定解除特定のPythonディストリビューションを実行するには(アナコンダ)。
具体的には、Emacsパッケージ(emacs ジェダイ)にアクセスする必要があるのですが、現在は設定解除 LD_LIBRARY_PATH
まずEmacsを起動する必要があるのでセットemacs-jedi
後でEmacs 内から使用できるようにします。
これは本当に可能なのでしょうか?
答え1
これは可能ではないと思います。なぜなら、スクリプトをソースするためにサブシェルを呼び出すたびに、emacs アプリケーションが起動された元のプロセスから子プロセスを呼び出すからです。
環境変数のエクスポートは一方通行であり、親プロセスのみが子プロセスに変数を提供できますが、子プロセスは親の環境を操作することはできません。
実験
私は を使用していますvim
が、同じことが にも適用されるはずですemacs
。ソースへのサンプル ファイル。
$ more ~/vars.bash
export VAR=somevalue
初期親環境は
$VAR
未設定です$ echo $VAR $
を起動します
vim
。次に、サブシェルを呼び出して上記のファイル (:sh
) をソースします。# check variable $ echo $VAR $ # source and re-check $ source ~/vars.bash $ echo $VAR somevalue
サブシェルを終了し、vim に戻ります。次に、別のサブシェル (
:sh
) を呼び出します。$ exit ... back in vim, do another `:sh` ... # check variable $ echo $VAR $
答え2
Emacsをロードした後にLD_LIBRARY_PATHの設定を解除するだけなら、以下を追加するだけです。
(setenv "LD_LIBRARY_PATH")
~/.emacs
または他の init ファイルに追加します。
前後に入れ替える必要がある場合は、(getenv "LD_LIBRARY_PATH")
まず結果を変数に保存して、後で復元できるようにします。
答え3
ソースの前後のコマンドdiff
の出力を比較し、それに応じて関数 を呼び出す、Emacs Lisp の優れた部分を見つけました。export
setenv
https://gist.github.com/ffevotte/9345586