Frage

Ich habe ein C-Programm, das es Befehlszeile anzeigt, indem durch die argv Variable iteriert.

#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;
}

ich aufgerufen, um das Programm in einem Ordner einen großen C ++ Quellbaum wie folgt enthalten:

./a.out **/*.h

Der Ausgang:

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

Allerdings Programme wie ls und grep Arbeit ohne Probleme, wenn im selben Ordner mit dem **/*.h glob aufgerufen. Warum scheitern zsh wenn mein Programm aufrufen? Wie funktioniert zsh gehen über Platzhalter erweitert?

Edit:. Ich benutze zsh auf Cygwin

War es hilfreich?

Lösung

Ist die Anwendung, die Sie haben versucht, eine Windows-Anwendung (einschließlich mingw) oder einem Cygwin-App?

laufen

ARG_MAX definiert, wie lange die Befehlszeile sein kann. Normalerweise ist es durch das Betriebssystem festgelegt, und alle Anwendungen beschränken sich auf sie, sondern auf Cygwin-Anwendungen für Cygwin zusammengestellt können einen größeren Puffer als Windows-Anwendungen verwenden - siehe diese Nachricht für ein Beispiel Diskussion.

Wenn Sie nicht unbedingt alle Dateien als args zur gleichen Zeit benötigen, können Sie xargs verwenden, um die Dateinamen Blöcke zu unterteilen, die in ARG_MAX passen:

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

Andere Tipps

ich Sie Code kompiliert und ausgeführt es im aktuellen Verzeichnis in einer ähnlichen Art und Weise und es funktionierte gut ohne Fehlermeldungen. Auch kam ich auf dieser Nachricht von jemandem geschrieben darauf hindeutet, dass die Fehlermeldung „Argument-Liste zu lang“ existiert nicht in dem Souce-Code für zsh so könnte in der Tat ein O Problem sein: http://www.zsh.org/mla/workers/1996/msg00060.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top