Я пытаюсь запустить команды P4V непосредственно из xemacs. После стягивания в p4.el для Emacs Я написал следующее:Проблема с аргументами процесса оболочки emacs lisp
(defun p4v-command (cmd)
(get-buffer-create p4-output-buffer-name);; We do these two lines
(kill-buffer p4-output-buffer-name) ;; to ensure no duplicates
(call-process "p4v" nil (get-buffer-create p4-output-buffer-name) nil
"-p" (p4-get-p4-port)
"-u" "UserName"
"-c" (p4-current-client)
"-cmd" (shell-quote-argument (concat cmd " " (buffer-name))))
(display-buffer p4-output-buffer-name))
Я пытаюсь получить следующую информацию по команде оболочки (при CMD равно prevdiff):
p4v -p port -u user -c client -cmd "prevdiff file.txt"
Однако , когда я выполняю функции выше с prevdiff я получаю следующую ошибку
P4V: unrecognized argument '"prevdiff' for '-cmd' option.
Таким образом, кажется, что вызов-процесс разделения в кавычки строку «prevdiff file.txt» в в индивидуальные аргументы и P4V обрабатывает только первый.
Это не похоже на другие команды, которые я пробовал с обработкой вызова, поэтому я не уверен, что это проблема с lisp или что-то общее с P4V.
Кто-нибудь знает, как это решить?
Я не могу воспроизвести то, что вы видите точно, но вы уверены, что вам нужен '(shell-quote-argument ...)' там? Кажется, что 'call-process' передает аргументы непосредственно процессу, без uinsg оболочки. Что произойдет, если вы не попытаетесь процитировать аргумент? –
Спасибо, Майк. Думаю, мне это нужно. Он вставляет кавычки в строку, поэтому вы получаете строку с "\" prevdiff file.txt \ "". Это означает, что строка передается в кавычки при передаче команде оболочки. – sickgemini