我想來源一個從 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