Emacs 如何从eLisp调用env并正确地转义到目标程序的路径?

Emacs 如何从eLisp调用env并正确地转义到目标程序的路径?,emacs,path,escaping,elisp,env,Emacs,Path,Escaping,Elisp,Env,我想做的是: (let ((pj-path (concat src haxe-project-generator))) (when (file-exists-p pj-path) (shell-command (concat "env " (haxe-build-env-vars <more arguments>) (format "'%s'" pj-path))))) (let((pj

我想做的是:

(let ((pj-path (concat src haxe-project-generator)))
        (when (file-exists-p pj-path)
          (shell-command
           (concat "env " (haxe-build-env-vars <more arguments>)
                   (format "'%s'" pj-path)))))
(let((pj路径(concat src haxe项目生成器)))
(当(file-exists-p pj路径)
(shell命令
(concat“env”(haxe build env vars)
(格式为“'%s'”pj路径()()))
也就是说,我想在填充了一些变量的环境中调用程序
pj path

(格式“'%s'”pj path)
行中,我尝试了单引号和双引号-但是
env
不进行路径扩展,如果它被引用,它会将其视为字符串,而不会找到文件。但是,如果它没有被引用,那么它将解释字符串的部分,直到第一个空格作为程序的路径为止

如果我转义空格(就像前面的反斜杠一样),这似乎是可行的,但是,可以肯定的是,空格并不是唯一会混淆执行命令的shell的字符


那么,在eLisp中转义应传递给env的可执行文件名的正确方法是什么呢?

试试
shell quote参数

(shell-command (concat "ls " 
                       (shell-quote-argument "/path with spaces/(and parens)/")))