2009-08-05 10 views
5

मेरे पास एक सी प्रोग्राम है जो argv चर के माध्यम से पुनरावृत्ति द्वारा इसकी कमांड लाइन प्रदर्शित करता है।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; 
} 

मैं एक बड़ी सी ++ इस तरह स्रोत पेड़ वाला कोई फ़ोल्डर में कार्यक्रम अनुरोध किया गया:

./a.out **/*.h 

उत्पादन:

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

हालांकि, किसी भी बिना की तरह ls और grep काम कार्यक्रमों एक ही फ़ोल्डर में **/*.h ग्लोब का उपयोग करते समय समस्याएं उत्पन्न हुईं। मेरे प्रोग्राम का आह्वान करते समय zsh विफल क्यों होता है? zsh वाइल्डकार्ड का विस्तार करने के बारे में कैसे जाता है?

संपादित करें: मैं साइगविन पर zsh का उपयोग कर रहा हूं।

+0

क्यों डबल का उपयोग '*' के बजाय आपकी कमांड लाइन में सिंगल '*'? –

उत्तर

5

क्या आपने जिस एप्लिकेशन को चलाने की कोशिश की है विंडोज ऐप (मिंगव सहित) या एक सिग्विन ऐप?

ARG_MAX परिभाषित करता है कि कमांड लाइन कितनी देर तक हो सकती है। आमतौर पर यह ओएस द्वारा सेट किया जाता है, और सभी एप्लिकेशन इसके लिए सीमित हैं, लेकिन सिगविन के लिए संकलित सिगविन अनुप्रयोगों पर विंडोज ऐप्स की तुलना में एक बड़ा बफर का उपयोग कर सकते हैं - उदाहरण चर्चा के लिए this message देखें।

के रूप में एक ही समय में आर्ग, आप ब्लॉक करने के लिए फ़ाइल नाम है कि ARG_MAX में फिट विभाजन xargs उपयोग कर सकते हैं आप आवश्यक रूप से सभी फ़ाइलों की आवश्यकता नहीं है, तो:

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

हां यह एक विंडोज निष्पादन योग्य है जो सिगविन पर चल रहा है। –

2

मैंने आपको कोड संकलित किया और इसे उसी निर्देशिका में वर्तमान निर्देशिका में निष्पादित किया और यह बिना किसी त्रुटि संदेश के ठीक काम किया। इसके अलावा मैं इस संदेश पर पोस्ट करता हूं कि किसी व्यक्ति द्वारा पोस्ट किया गया है कि त्रुटि संदेश "तर्क सूची बहुत लंबी" zsh के लिए सॉस कोड में मौजूद नहीं है, इसलिए वास्तव में एक ओएस मुद्दा हो सकता है: http://www.zsh.org/mla/workers/1996/msg00060.html

संबंधित मुद्दे