Как вызвать 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)/")))