Je tente d'exécuter des commandes P4V directement à partir de xemacs. Après avoir tiré dans le p4.el à emacs j'ai écrit ce qui suit:Problème avec les arguments du processus de shell Lisp emacs
(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))
Je suis en train d'obtenir ce qui suit pour commande shell (lorsque cmd est égal à prevdiff):
p4v -p port -u user -c client -cmd "prevdiff file.txt"
Cependant , quand j'exécute la fonction ci-dessus avec prevdiff je reçois l'erreur suivante
P4V: unrecognized argument '"prevdiff' for '-cmd' option.
il semble donc que le processus d'appel est le fractionnement de la chaîne entre guillemets « prevdiff fichier.txt » dans dans arguments individuels et P4V ne traite que le premier.
Cela ne semble pas se produire pour d'autres commandes que j'ai essayées avec le processus d'appel, donc je ne suis pas sûr si c'est un problème de lisp ou quelque chose à voir avec P4V.
Est-ce que quelqu'un sait comment résoudre ce problème?
Je ne peux pas reproduire ce que vous voyez exactement, mais êtes-vous sûr d'avoir besoin de l'argument '(shell-quote-argument ...)'? Il semble que 'call-process' passe les arguments directement au processus, sans uinsg le shell. Que se passe-t-il si vous n'essayez pas de citer l'argument? –
Merci Mike. Je pense que j'en ai besoin. Il insère les guillemets dans la chaîne afin que vous obteniez une chaîne avec "\" prevdiff file.txt \ "". Cela signifie que la chaîne est placée entre guillemets lorsqu'elle est passée à la commande shell. – sickgemini