สามารถใช้งานต่อไปนี้ (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