2013-07-11 3 views
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* 버퍼에 삽입 된 두 번째 형식이 의도 한대로 작동합니다 (태그 파일 생성).elisp에서 문자열을 쉘 명령으로 실행할 수 없습니다.

왜 두 기술 모두에서 동일한 결과가 나타나지 않습니까? 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\\^\"^\"" 
+1

다른 버전의'ctags.exe '를 사용할 수도 있습니다. 전체 경로로 시도해 볼 수 있습니까? – slitvinov

+0

'C-h f shell-quote-argument'를 찾으십시오. – phils

+0

@slitvinov 전체 경로를 사용하고 있었으므로 AFAIK는 이맥스가 아닌 ctags의 문제입니다. 그것을 명확히하기 위해 편집 된 질문. –

답변

2

shell-quote-argument는 전체적으로 쉘 명령 단일 인수 (따라서 이름),하지 쉘 명령 인용위한 것이다.

당신이보고있는 오류가 어딘가에 인용 부호가 없다는 것을 감안할 때 수동으로 작성하고 올바른 구문이 있다고 가정 할 때 내장 명령을 사용하여 따옴표를 처리하는 것이 좋습니다.

또 다른 대안은 M-! 명령을 인터랙티브하게 실행하려면 무엇이 받아 들여지는지 파악한 다음 나중에 C-xM- :을 사용하여 elisp 양식을 얻으십시오.

+0

+1'C-x M- :'를 사용하여 마지막 명령의 elisp 형식을 얻으려면. 어떤 이유로 나는 [공간이있는 디렉토리 만 따옴표로 묶어야했습니다.] (http://superuser.com/questions/279008/how-do-i-escape-spaces-in-command-line-in -windows-without-using-quotation-marks)를 사용하고 전체 경로가 아닙니다.이것은 다른 컴퓨터에서 작동하는 것입니다 :'(메시지 "c : \\ Users \\ Username \\ Desktop \\\"ctags 58 \ "ctags.exe -f \"c : \\ Users \\ Username \ \ Desktop \\ TAGS \ "\"c : \\ Users \\ 사용자 이름 \\ Desktop \\ ctags 58 \\\ "")' –

1

난 당신이 번 확인하는 것이 좋습니다 것 모두 실행이 같은 경로를 사용하고, ctags.exe 때문에 같은 경우. 그게 문제일지도 모른다. ctags.exe의 전체 경로를 사용하여이를 확인하십시오.

일반적인 쉘에서 -Re 옵션을 사용하면 내 ctags (Linux)에서 동일한 오류가 발생합니다. 그것이 저를 그렇게 생각하게 만듭니다.

+0

두 테스트 중에'ctags.exe '와 같은 디렉토리에있었습니다. 문제가 어디에서 왔는지 더 명확히하기 위해 질문을 수정했습니다. :) –

+0

답장은 질문을 편집하기 전에 명시한 원래 문제를 해결했습니다. 그리고 나는 당신이 가지고있는 문제가 심지어 관련되어 있을지도 모른다고 생각합니다 ... 쉘 명령어가 사용하는 쉘과 수동으로 같은 쉘에 명령어를 붙여 넣는 쉘입니까? 나는 윈도우에서'(shell-command "echo $ 0")'를 수행 할 수 있는지 확신 할 수 없다. – juanleon

+0

나는'shell' 명령으로 생성 된 버퍼로 emacs 내에서 명령을 실행하고있다. 나는 그것과'shell-command'가 모두 emac의 cmdproxy.exe를 사용하고 있다고 믿는다. 그러나 나는 이중 검사 방법을 찾고있다. –

0

셸의 기능을 사용하지 않으므로 여기서는 shell-command 대신 call-program을 사용하는 것이 좋습니다. 체중을 셸에 설명하도록 인용해야합니다. 너 무슨 뜻이야?

관련 문제