emacs lisp shell进程参数的问题
发布时间:2020-12-15 21:02:44 所属栏目:安全 来源:网络整理
导读:我正在尝试直接从xemacs运行P4V命令. 把p4.el拉到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
我正在尝试直接从xemacs运行P4V命令.
把p4.el拉到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)) 我正在尝试为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仅处理第一个参数. 对于我尝试使用call-process的其他命令,似乎没有这种情况发生,因此我不确定它是否是一个lisp问题或与P4V有关. 有谁知道如何解决这个问题? 解决方法
call-process肯定不会连接它的参数;它直接传递给程序.要查看这种情况,请键入M-:并计算以下表达式:
(call-process "/bin/ls" nil "*scratch*" nil "avg ba") 其中“avg”和“ba”是当前目录中的文件.我将以下消息插入到临时缓冲区中: /bin/ls: cannot access avg ba: No such file or directory 如果call-process重新解析了参数,它会将“avg ba”分成两个独立的参数—但错误信息表明它没有. 相反,问题在于shell-quote-argument.当我评估你在暂存缓冲区中提到的调用时,我得到以下结果: (shell-quote-argument "prevdiff file.txt") "prevdiff file.txt" 换句话说,实际接收的命令p4v就是你在shell中输入的内容: p4v -p port -u user -c client -cmd '"prevdiff file.txt"' 这就是p4v抱怨“prevdiff”的原因. 所以我认为你想要的是: "-cmd" (concat cmd " " (shell-quote-argument (buffer-name)))) (当然,请检查我的parens). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容