0
(shell-command "\"C:\\Documents and Settings\\ggustafson\\Desktop\\stuff\\ctags58\\ctags.exe\" -eR -f \"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\\TAGS\" \"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\"")

(message "\"C:\\Documents and Settings\\ggustafson\\Desktop\\stuff\\ctags58\\ctags.exe\" -eR -f \"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\\TAGS\" \"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\"")

执行顶部表单给了我错误'C:\Documents' is not recognized as an internal or external command, operable program or batch file.。执行输出的第二种形式放入*Messages*缓冲区按预期工作(创建一个标签文件)。

为什么两种技术都没有得到相同的结果?在将字符串发送到外壳之前是否shell-command会更改字符串?如何使用 elisp 来执行一个字符串,就像我将它粘贴到命令提示符中一样?

shell-quote-argument也不起作用,因为它会产生一个无法用任何一种方法执行的字符串:

(message (shell-quote-argument "\"C:\\Documents and Settings\\ggustafson\\Desktop\\stuff\\ctags58\\ctags.exe\" -eR -f \"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\\TAGS\" \"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\""))
"^\"\\^\"C:\\Documents and Settings\\ggustafson\\Desktop\\stuff\\ctags58\\ctags.exe\\^\" -eR -f \\^\"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\\TAGS\\^\" \\^\"C:\\Documents and Settings\\ggustafson\\Desktop\\BlueTooth_7020\\^\"^\""
4

3 回答 3

2

shell-quote-argument用于引用 shell 命令的单个参数(因此得名),而不是整个 shell 命令。

鉴于您看到的错误表明某处缺少引用,使用内置命令处理引用而不是手动编写并假设您具有正确的语法似乎是个好主意。

另一种选择是使用M-!交互式执行命令(或类似命令),找出被接受的内容,然后使用C-xM-:获取 elisp 表单。

于 2013-07-15T21:08:47.997 回答
1

我建议您仔细检查执行是否使用相同的路径,因此相同ctags.exe的 . 我认为这可能是问题所在。您可能希望使用完整路径来ctags.exe确保这一点。

如果我-Re在普通 shell 上使用该选项,我的 ctags (Linux) 会给我同样的错误;这就是让我这么想的原因。

于 2013-07-11T15:39:37.987 回答
0

我强烈建议您使用call-program而不是shell-command此处,因为您不使用 shell 的任何功能,而且它只会妨碍您,迫使您引用体操来向 shell 解释您的意思。

于 2013-07-22T14:27:02.630 回答