基本上我想产生一个进程改变其工作目录。 我的想法是产生一个过程并设置PWD环境variables。
有办法获得这样的东西?
(事实上,我想改变任何环境variables的灵活性)
只要在产生你的进程之前绑定default-directory
变量。 例:
(let ((default-directory "/tmp/")) (call-process "/bin/bash" nil "*scratch*" nil "-c" "echo working dir is $PWD"))
我从我的*scratch*
缓冲区运行这个working dir is /tmp
的字符串working dir is /tmp
被添加到缓冲区。
你是这个意思吗?
这显示了默认的环境变量:
(shell-command "env")
这显示了如何在每个进程的基础上改变它们:
(shell-command "PWD=/tmp env")
$PWD
是反映当前工作目录的环境变量,而不是一个控制它的环境变量。
根据Elisp手册的“ 进程”部分,产生进程的默认目录由default-directory的值确定。 生成的进程的环境与Emacs会话的环境相同,您可以使用setenv进行修改。 您也可以通过process-environment变量指定仅用于衍生进程的环境变量。
为了让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
,并设置相同的值。