문제

나는 C 프로그램이 있습니다. argv 변하기 쉬운.

#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

그러나 프로그램과 같은 프로그램 ls 그리고 grep 사용을 호출 할 때 아무런 문제없이 작업하십시오 **/*.h 같은 폴더의 글로벌. 왜 zsh 내 프로그램을 호출 할 때 실패합니까? 어떻게 zsh 와일드 카드를 확장 하시겠습니까?

편집하다: Cygwin에서 ZSH를 사용하고 있습니다.

도움이 되었습니까?

해결책

Windows 앱 (MINGW 포함) 또는 Cygwin 앱을 실행하려는 응용 프로그램입니까?

arg_max 명령 줄의 길이를 정의합니다. 일반적으로 OS에 의해 설정되며 모든 응용 프로그램은 IT로 제한되지만 Cygwin 용으로 컴파일 된 Cygwin 응용 프로그램에서는 Windows 앱보다 더 큰 버퍼를 사용할 수 있습니다. 이 메시지 예를 들어 토론.

반드시 모든 파일을 Args로 동시에 요구하지 않으면 xargs를 사용하여 파일 이름을 Arg_max에 맞는 블록에 분할 할 수 있습니다.

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

다른 팁

코드를 컴파일하고 현재 디렉토리에서 비슷한 방식으로 실행했으며 오류 메시지없이 잘 작동했습니다. 또한 ZSH의 SOUCE 코드에는 "인수 목록이 너무 길다"는 오류 메시지 "인수 목록"이 존재하지 않음을 제안하는 누군가가 게시 한이 메시지에 나왔으므로 실제로 OS 문제 일 수 있습니다. http://www.zsh.org/mla/workers/1996/msg00060.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top