我試圖直接從xemacs運行P4V命令。 在p4.el拉後Emacs的,我寫了以下內容:emacs lisp shell進程參數問題
(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))
我試圖得到shell命令如下(在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只處理第一個參數。
這似乎並沒有發生,因爲我已經與呼叫進程試圖所以我不知道其他命令,如果它是一個口齒不清的問題或者是與P4V。
有誰知道如何解決這個問題?
我無法重現你準確看到的內容,但是你確定需要'(shell-quote-argument ...)'嗎?看起來'call-process'直接將參數傳遞給進程,而不使用shell。如果你不試圖引用這個論點,會發生什麼? – 2010-07-29 06:30:56
謝謝邁克。我想我確實需要它。它將引號插入到字符串中,因此您將得到一個帶有「\」prevdiff file.txt \「」的字符串。這意味着當傳遞給shell命令時,該字符串會用引號括起來。 – sickgemini 2010-07-29 21:44:43