0

我正在尝试做的事情如下:

(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)))))

即我想pj-path在填充了一些变量的环境中调用一个程序。

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

如果我转义空格(如在它们前面加上反斜杠),它似乎可以工作,但可以肯定的是,空格不是唯一会混淆执行命令的 shell 的字符。

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

4

1 回答 1

2

试试shell-quote-argument

(shell-command (concat "ls " 
                       (shell-quote-argument "/path with spaces/(and parens)/")))
于 2012-06-25T16:05:32.840 回答