वर्कअराउंड के रूप में, निम्नलिखित का उपयोग किया जा सकता है (लिनक्स, बैश):
printenv -0 > env.txt
बैश टर्मिनल विंडो से पहली बार चलाएं ,
- फिर 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
: बैश स्क्रिप्ट को परिभाषित करें 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
Emacs पर्यावरण चर को अद्यतन करने के लिए शेल कमांड लाइन से टाइप कर सकते हैं ।