基本上,我想要生成一个进程并更改其工作目录。 我的想法是生成一个进程并设置PWD环境变量。
有没有一种方法可以实现这样的功能?
(实际上,我希望为了灵活性更改任何环境变量)
就我所知,为了让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-directory
和 process-environment
的值为相同的值。
(shell-command "env")
以下是如何在每个进程基础上更改它们的示例:
(shell-command "PWD=/tmp env")
default-directory
变量即可。例如:(let ((default-directory "/tmp/"))
(call-process "/bin/bash" nil "*scratch*" nil "-c" "echo working dir is $PWD"))
我从我的*scratch*
缓冲区中运行了这个命令,并且字符串working dir is /tmp
被添加到了缓冲区。
$PWD
是一个环境变量,反映了当前工作目录,但不控制它。
根据进程部分的Elisp手册,生成的进程的默认目录取决于default-directory的值。生成的进程的环境与Emacs会话的环境相同,您可以使用setenv修改它。您还可以通过process-environment变量指定仅用于生成的进程的环境变量。