微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Emacs Lisp产生具有自定义环境variables的subprocess

基本上我想产生一个进程改变其工作目录。 我的想法是产生一个过程并设置PWD环境variables。

有办法获得这样的东西?

(事实上​​,我想改变任何环境variables的灵活性)

在emacs中取消关键页向上和向下翻页

当失去焦点时更改Emacs窗口的外观

如何检查框架或terminal中的emacs?

如何将emacsclient背景设置为Emacs背景?

如何在emacs中打开时自动解压缩自定义压缩文件

如何检查Xorg是否在Emacs Lisp中运行?

有没有办法在Emacs中创build“项目文件”?

process.exit(0):输出消失?

在emacs中,如何执行外部命令而不是emacs进程?

在Windows上重新定义Emacs中的键

只要在产生你的进程之前绑定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 ,并设置相同的值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐