我的配置里有一些默认的环境变量,现在要启动一个新进程,希望新进程能使用一个新环境(增量在已有的环境)。
现在的做法是:
(let ((process-environment (cons "NAME=VALUE" process-environment)))
(setq my-process (apply #'start-process "proc" (current-buffer) args)))
这么做确实有效果,而且let
binding之后的process-environment
不会被污染。
但是emacs.stackexchange上有人说必须"create a copy of `process-environment` for the `let` -binding"?
请问我目前这种设置环境变量的方法安全吗?还是必须 copy?
多谢。
cireu
2
This function works by modifying process-environment.
As a special case, setting variable TZ calls set-time-zone-rule as
a side-effect.
from setenv
List of overridden environment variables for subprocesses to inherit.
Each element should be a string of the form ENVVARNAME=VALUE.
from process-environment
所以 process-environment
应该用 setenv
和 getenv
来操作,setenv
可能会对其进行有副作用的修改,所以建议先复制。
但是这个变量本身恰好是个 list,所以你用 cons 的方法有点歪门邪道,但是用 cons 的方法本身是无副作用的(不用复制备份)
1 个赞