2009-08-05 8 views
5

私は、コマンドラインにargv変数を繰り返して表示するCプログラムを持っています。zshはどのくらい正確にグロブを展開しますか?

#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++ソースツリーを含むフォルダにプログラムを起動さ:任意のなしlsgrep仕事のようなプログラム、しかし

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

./a.out **/*.h 

出力同じフォルダ内の**/*.hグロブを使用して呼び出されたときの問題プログラムを呼び出すときにzshが失敗するのはなぜですか? zshはどのようにワイルドカードを展開しますか?

編集:私はcygwinでzshを使用しています。

+0

なぜダブル「*」を使用する代わりに、コマンドラインで「*」を1つだけ使用しますか? –

答えて

5

実行しようとしたアプリケーションはWindowsアプリケーション(mingwを含む)またはCygwinアプリケーション?

ARG_MAXは、コマンドラインの長さを定義します。通常はOSによって設定され、すべてのアプリケーションはそれに限定されますが、Cygwin用にコンパイルされたCygwinアプリケーションでは、Windowsアプリケーションよりも大きなバッファを使用できます。例についてはthis messageを参照してください。

あなたは必ずしも同時に引数としてすべてのファイルを必要としない場合は、あなたがARG_MAXに収まるブロックにファイル名を分割するxargsのを使用することができますが:

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

はい、これはCygwin上で動作するWindows実行ファイルです。 –

2

私はコードをコンパイルし、同様の方法でカレントディレクトリで実行しましたが、エラーメッセージなしでうまくいきました。また、私はこのメッセージに、「引数リストが長すぎます」というメッセージがzshのソースコードに存在しないことを示唆しているので、実際にはOSの問題である可能性があります。http://www.zsh.org/mla/workers/1996/msg00060.html

関連する問題