2009-08-05 7 views
5

argv 변수를 반복하여 명령 줄을 표시하는 C 프로그램이 있습니다.zsh은 정확히 glob을 확장합니까?

#include <stdio.h> 

int main(int argc, char *argv[]){ 
    int i = 0; 
    printf("----------\n"); 
    for(i = 0; i < argc; i++) 
     printf("%s\n", argv[i]); 
    return 0; 
} 

는이 같은 큰 C++ 소스 트리를 포함하는 폴더에 프로그램을 호출 :

./a.out **/*.h 

출력 : 그러나

zsh: argument list too long: ./a.out 

, 어떤없이 lsgrep 일 같은 프로그램 동일한 폴더에서 **/*.h glob을 사용하여 호출 할 때의 문제. 내 프로그램을 호출 할 때 zsh이 실패하는 이유는 무엇입니까? zsh은 와일드 카드를 어떻게 확장합니까?

편집 : 저는 cygwin에서 zsh를 사용하고 있습니다.

+0

이유를 두 번 사용을 '*'대신 명령 줄에서 '*'하나만? –

답변

5

실행하려고 시도한 응용 프로그램이 있습니까? Windows 응용 프로그램 (mingw 포함) 또는 Cygwin 응용 프로그램?

ARG_MAX은 명령 줄의 길이를 정의합니다. 일반적으로 OS에 의해 설정되며 모든 응용 프로그램은이 응용 프로그램에만 국한됩니다. Cygwin 용으로 컴파일 된 Cygwin 응용 프로그램에서는 Windows 응용 프로그램보다 큰 버퍼를 사용할 수 있습니다 - 예제 토론은 this message을 참조하십시오.

동시에 인수, 당신은 ARG_MAX에 맞게 블록에 파일 이름 분할 xargs를 사용할 수 있습니다 당신이 반드시 모든 파일을 필요로하지 않는 경우

echo **/*.h | xargs ./a.out 
+0

예 Cygwin에서 실행되는 Windows 실행 파일입니다. –

2

코드를 컴파일하고 현재 디렉토리에서 비슷한 방식으로 실행했는데 오류 메시지없이 잘 작동했습니다. 또한이 메시지는 "인수 목록이 너무 깁니다"라는 오류 메시지가 zsh 용 소스 코드에 존재하지 않으므로 실제로 OS 문제 일 수 있다고 제안했습니다. http://www.zsh.org/mla/workers/1996/msg00060.html