ZSH는 지구를 정확히 어떻게 확장합니까?
-
22-07-2019 - |
문제
나는 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