Như một giải pháp thay thế, những điều sau đây có thể được sử dụng (Linux, Bash):
- Lần chạy đầu tiên
printenv -0 > env.txttừ cửa sổ đầu cuối Bash,
- Sau đó từ bên trong Emacs, chạy
(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)))))
Cập nhật
Tôi chỉ ra rằng điều này có thể được thực hiện một cách thanh lịch hơn bằng cách sử dụng --evaltùy chọn của emacsclientlệnh: Xác định tập lệnh Bash update_emacs_env:
#! /bin/bash
fn=tempfile
printenv -0 > "$fn"
emacsclient -s server_name -e '(my-update-env "'"$fn"'")' >/dev/null
server_nametên máy chủ Emacs của bạn ở đâu và my-update-envlà một chức năng được xác định bởi ~/.emacstệp của bạn :
(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)))))
Bây giờ bạn có thể chỉ cần gõ update_emacs_envtừ dòng lệnh shell để cập nhật các biến môi trường Emacs ..