Emacs Lisp如何使用自定义环境变量生成子进程

3

基本上,我想要生成一个进程并更改其工作目录。 我的想法是生成一个进程并设置PWD环境变量。

有没有一种方法可以实现这样的功能?

(实际上,我希望为了灵活性更改任何环境变量)

4个回答

2

就我所知,为了让Python子进程按照我想要的方式运行(完全认为它们在指定的目录中),我必须执行以下操作:

(let* ((default-directory (find-correct-dir))
       (process-environment (cons (format "PWD=%s" default-directory)
                                  process-environment)))
  (do-the-subprocess-thing))

或者,如果我想要放弃其余的环境:

(let* ((default-directory (find-correct-dir))
       (process-environment (list (format "PWD=%s" default-directory))))
  (do-the-subprocess-thing))

也就是说,我需要设置同时 default-directoryprocess-environment 的值为相同的值。


2
你是指像这样吗?
这显示了默认的环境变量:
(shell-command "env")

以下是如何在每个进程基础上更改它们的示例:

(shell-command "PWD=/tmp env")

2
只需在启动进程之前绑定default-directory变量即可。例如:
(let ((default-directory "/tmp/"))
  (call-process "/bin/bash" nil "*scratch*" nil "-c" "echo working dir is $PWD"))

我从我的*scratch*缓冲区中运行了这个命令,并且字符串working dir is /tmp被添加到了缓冲区。


2

$PWD是一个环境变量,反映了当前工作目录,但不控制它。

根据进程部分的Elisp手册,生成的进程的默认目录取决于default-directory的值。生成的进程的环境与Emacs会话的环境相同,您可以使用setenv修改它。您还可以通过process-environment变量指定仅用于生成的进程的环境变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接