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パスの展開は行われず、引用符で囲まれている場合は、ファイルが見つからず、文字列として扱われます。ただし、引用符で囲まれていない場合は、最初の空白までの文字列の部分をプログラムへのパスとして解釈します。

スペースをエスケープすると(前に円記号を付ける場合のように)、機能しているように見えますが、コマンドの実行をシェルが混乱させるのは、確かに空白だけではありません。

それで、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 に答える