2009-08-05 8 views
5

J'ai un programme C qui affiche sa ligne de commande en itérant à travers la variable argv.Comment zsh développe-t-il exactement les globs?

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

J'invoquaient le programme dans un dossier contenant un grand arbre source C++ comme ceci:

./a.out **/*.h 

La sortie:

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

Cependant, des programmes tels que ls et grep travail sans problèmes lors de l'appel en utilisant le **/*.h glob dans le même dossier. Pourquoi zsh échoue lors de l'appel de mon programme? Comment fonctionne zsh pour développer les caractères génériques?

Editer: J'utilise zsh sur cygwin.

+0

pourquoi utiliser double « * » au lieu de simple '*' dans votre ligne de commande? –

Répondre

5

L'application que vous avez essayé d'exécuter Application Windows (y compris MINGW) ou une application Cygwin?

ARG_MAX définit combien de temps la ligne de commande peut être. Habituellement, il est défini par le système d'exploitation, et toutes les applications sont limitées, mais sur Cygwin, les applications compilées pour Cygwin peuvent utiliser un tampon plus grand que les applications Windows - voir this message pour un exemple de discussion.

Si vous ne souhaitez pas nécessairement tous les fichiers comme args en même temps, vous pouvez utiliser xargs pour partitionner les noms de fichiers à blocs qui correspondent à ARG_MAX:

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

Oui, il s'agit d'un exécutable Windows s'exécutant sur Cygwin. –

2

J'ai compilé votre code et l'ai exécuté dans le répertoire courant d'une manière similaire et cela a bien fonctionné sans aucun message d'erreur. Aussi je suis tombé sur ce message posté par quelqu'un suggérant que le message d'erreur "liste d'arguments trop long" n'existe pas dans le code source de zsh, donc peut être un problème de système d'exploitation: http://www.zsh.org/mla/workers/1996/msg00060.html

Questions connexes