私の考えでは源泉Emacs内で環境変数を変更するシェルスクリプトです。つまり、シェルスクリプトがEmacsが実行されている環境を変更できるようにしたいので、実行中のEmacsセッション内でこれを実行したいと思います。
言い換えれば:
- 私はEmacsを起動します。
zsh
zsh
Emacsで次の環境変数を変更するスクリプトを取得したいと思います。LD_LIBRARY_PATH
背景:
これは私が説明した問題を避ける試みです。ここ、私が必要な場所に置く LD_LIBRARY_PATH
Emacsを実行するには未設定特定のPythonディストリビューション(Python)。
特にEmacsパッケージ(Emacs Jedi)このPythonディストリビューションへのアクセスが必要ですが、現在は未設定 LD_LIBRARY_PATH
Emacsを始めましょう。置く後でEmacsで使用できますemacs-jedi
。
これは可能ですか?
答え1
スクリプトを取得するためにサブシェルを呼び出すたびに、Emacsアプリケーションを起動した元のプロセスからサブプロセスを呼び出すので、これは可能ではないと思います。
環境変数のエクスポートは一方向の方法です。親プロセスだけが子プロセスに変数を提供できますが、子プロセスは親プロセスの環境を操作できません。
実験
使用中ですが、.sourceサンプルファイル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
他の初期化ファイル。
前後に置き換える必要がある場合は、(getenv "LD_LIBRARY_PATH")
最初に結果を変数に保存して後で復元できます。
答え3
diff
私はコマンドを調達する前と後にコマンドの出力を比較し、それに応じて関数を呼び出すEmacs lispの素晴らしい部分を見つけました。export
setenv
https://gist.github.com/ffevotte/9345586