解决方法是,可以使用以下命令(Linux,Bash):
- 首先
printenv -0 > env.txt
从Bash终端窗口运行
- 然后从Emacs内部运行
(defun my-update-env ()
(interactive)
(let ((str
(with-temp-buffer
(insert-file-contents "env.txt")
(buffer-string))) lst)
(setq lst (split-string str "\000"))
(while lst
(setq cur (car lst))
(when (string-match "^\\(.*?\\)=\\(.*\\)" cur)
(setq var (match-string 1 cur))
(setq value (match-string 2 cur))
(setenv var value))
(setq lst (cdr lst)))))
更新资料
事实证明,使用--eval
以下emacsclient
命令的选项可以更优雅地完成此操作:定义Bash脚本update_emacs_env
:
#! /bin/bash
fn=tempfile
printenv -0 > "$fn"
emacsclient -s server_name -e '(my-update-env "'"$fn"'")' >/dev/null
server_name
您的Emacs服务器名称在哪里,并且my-update-env
是由~/.emacs
文件定义的函数:
(defun my-update-env (fn)
(let ((str
(with-temp-buffer
(insert-file-contents fn)
(buffer-string))) lst)
(setq lst (split-string str "\000"))
(while lst
(setq cur (car lst))
(when (string-match "^\\(.*?\\)=\\(.*\\)" cur)
(setq var (match-string 1 cur))
(setq value (match-string 2 cur))
(setenv var value))
(setq lst (cdr lst)))))
现在,您只需update_emacs_env
在shell命令行中键入以更新Emacs环境变量。