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)/")))