Как вызвать env из eLisp и правильно выбрать путь к целевой программе?

Я пытаюсь сделать следующее:

(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 не выполняет расширение пути и, если оно заключено в кавычки, оно будет обрабатывать его как строку, не находя файл. Однако, если он не заключен в кавычки, он будет интерпретировать часть строки до первого пробела как путь к программе.

Если я избегаю пробелов (как в предыдущем случае с обратной косой чертой), это похоже на работу, но, конечно, пробелы - не единственный символ, который может запутать оболочку, выполняющую команду.

Итак, как правильно избежать имени исполняемого файла, который должен быть передан env в eLisp?

1 ответ

Решение

Пытаться shell-quote-argument,

(shell-command (concat "ls " 
                       (shell-quote-argument "/path with spaces/(and parens)/")))
Другие вопросы по тегам