2011-04-03 20 views
13

की शुरुआत प्रदर्शित नहीं करता है, मैं अपनी निर्देशिका में फाइलों का एक समूह make करने की कोशिश कर रहा हूं, लेकिन फाइलें ~ 200 लाइनों की त्रुटियों को उत्पन्न कर रही हैं, इसलिए वे मेरी टर्मिनल स्क्रीन को बहुत तेज़ी से उड़ते हैं और मैं उन्हें पढ़ने के लिए स्क्रॉल करना है।पिपिंग प्रोग्राम आउटपुट कम से कम आउटपुट

मैं एक पेजर पर स्क्रीन पर प्रदर्शित आउटपुट को पाइप करना चाहता हूं जो मुझे शुरुआत में शुरू होने वाली त्रुटियों को पढ़ने देगा। लेकिन जब मैं

make | less 

less कोशिश उत्पादन की शुरुआत प्रदर्शित नहीं करता है - यह उत्पादन है कि आमतौर पर स्क्रीन पर पहुंचाया है के अंत में प्रदर्शित करता है, और फिर उत्पादन 1 लाइन लंबी है मुझसे कहता है। जब मैं Gg टाइप करने का प्रयास करता हूं, तो स्क्रीन पर एकमात्र पंक्ति निष्पादित मेकफ़ाइल की रेखा होती है, और नियमित स्क्रीन आउटपुट गायब हो जाता है।

क्या मैं less गलत तरीके से उपयोग कर रहा हूं? मैंने वास्तव में पहले कभी इसका उपयोग नहीं किया है, और मुझे sh myscript.sh | less जैसी कुछ समस्याएं हैं, जहां यह आउटपुट फ़ाइल की शुरुआत तुरंत प्रदर्शित नहीं करती है।

उत्तर

13

make से त्रुटियां मानक त्रुटि स्ट्रीम (stderr सी) पर दिखाई देती हैं, जो सामान्य पाइप द्वारा पुनर्निर्देशित नहीं होती है। यदि आप इसे less पर रीडायरेक्ट करना चाहते हैं, तो आपको make |& less (csh, आदि) या make 2>&1 | less (sh, bash, आदि) की आवश्यकता है।

+0

एक्चा, मैंने सोचा कि इसके साथ कुछ करने के लिए कुछ था लेकिन मैंने कोशिश की 'बनाने | कम 2> और 1'। गलत जगह पर रीडायरेक्ट था। –

+0

क्या आप संक्षेप में बता सकते हैं कि '2> और 1' और '| &' क्या करें? – winklerrr

9

त्रुटि आउटपुट को थोड़ी अलग जगह पर भेजा जाता है जो सामान्य पाइपलाइनों द्वारा नहीं पकड़ा जाता है, क्योंकि आप अक्सर त्रुटियों को देखना चाहते हैं, लेकिन उन डेटा के साथ इंटरमीस्ड नहीं किया गया है जिन्हें आप आगे संसाधित करने जा रहे हैं।

$ make 2>&1 | less 

bash में और zsh (और csh/tcsh है, जो जहां वे इसे से उधार) इस make जैसी चीजों के साथ

$ make |& less 

को छोटा किया जा सकता है: इस तरह बातें के लिए आप एक पुनर्निर्देशन का उपयोग जो कई त्रुटियों का उत्पादन करने के लिए प्रवण हैं, मैं बाद में निरीक्षण करना चाहता हूं, मैं आमतौर पर आउटपुट को एक फ़ाइल में कैप्चर करता हूं और फिर less फ़ाइल करता हूं जो बाद में फ़ाइल करता है:

$ make |& tee make.log 
$ less make.log 
+0

मैंने बैश में 'मेक | और कम' का उपयोग करने का प्रयास किया, लेकिन मुझे एक वाक्यविन्यास त्रुटि मिली। –

+0

एचआरएम, पुराने 'बैश' जैसा दिखता है; ओएसएक्स पर सिस्टम 'बश' (3.2) इसे स्वीकार नहीं करता है लेकिन मैकपॉर्ट्स से' बैश '4 करता है और मैवेरिक पर मानक' बाश 'करता है। – geekosaur

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