2009-08-05 11 views
5

Ho un programma C che mostra la sua riga di comando iterando attraverso la variabile argv.In che modo esattamente zsh estende 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; 
} 

ho invocato il programma in una cartella contenente una grande C++ albero di origine in questo modo:

./a.out **/*.h 

L'output:

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

Tuttavia, programmi come ls e grep lavoro senza alcuna problemi quando viene richiamato utilizzando il glob **/*.h nella stessa cartella. Perché zsh non riesce durante il richiamo del mio programma? In che modo zsh riguarda i caratteri jolly in espansione?

Modifica: Sto usando zsh su cygwin.

+0

Perché usare doppia '*' invece di singolo '*' nella riga di comando? –

risposta

5

È l'applicazione che si è tentato di eseguire un App di Windows (incluso mingw) o un'app Cygwin?

ARG_MAX definisce la lunghezza della riga di comando. Di solito è impostato dal sistema operativo e tutte le applicazioni sono limitate ad esso, ma sulle applicazioni Cygwin compilate per Cygwin è possibile utilizzare un buffer più grande rispetto alle app Windows - vedere this message per una discussione di esempio.

Se non richiedono necessariamente tutti i file come args, allo stesso tempo, è possibile utilizzare xargs per partizionare i nomi dei file di blocchi che si adattano in ARG_MAX:

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

Sì, questo è un eseguibile di Windows in esecuzione su Cygwin. –

2

Ho compilato il codice e l'ho eseguito nella directory corrente in un modo simile e ha funzionato correttamente senza alcun messaggio di errore. Inoltre mi sono imbattuto in questo messaggio pubblicato da qualcuno che suggerisce che il messaggio di errore "elenco di argomenti troppo lungo" non esiste nel codice souce per zsh quindi potrebbe effettivamente essere un problema del sistema operativo: http://www.zsh.org/mla/workers/1996/msg00060.html

Problemi correlati