2012-05-22 11 views
5

मैं tee कमांड का उपयोग करने के लिए नया हूं।एक आदेश के लिए तुरंत टीई कमांड का उपयोग

मैं अपने प्रोग्राम में से एक को चलाने की कोशिश कर रहा हूं जो खत्म होने में लंबा समय लगता है लेकिन यह प्रगति के रूप में जानकारी प्रिंट करता है। मैं आउटपुट को फ़ाइल में सहेजने के साथ-साथ खोल में आउटपुट देखने के लिए 'टीई' का उपयोग कर रहा हूं (bash)।

लेकिन समस्या tee आउटपुट को मेरे आदेश के अंत तक खोलने के लिए अग्रेषित नहीं करता है। क्या ऐसा करने का कोई तरीका है?

मैं डेबियन और bash का उपयोग कर रहा हूं।

उत्तर

3

यह वास्तव में आउटपुट की मात्रा और आपके द्वारा चलाए जा रहे आदेश के कार्यान्वयन पर निर्भर करता है। कोई प्रोग्राम सीधे stdout या stderr पर प्रिंट करने के लिए बाध्य नहीं है और इसे हर समय फ्लश करने के लिए बाध्य है। तो हालांकि अधिकांश सी रनटाइम कार्यान्वयन डेटा की एक निश्चित मात्रा के बाद फ्लश किया गया था, जैसे printf, रनटाइम रूटीन में से एक का उपयोग करके लिखा गया था, यह कार्यान्वयन के आधार पर सही नहीं हो सकता है।

यह tee इसे तुरंत आउटपुट नहीं करता है, यह संभवतः आपके आदेश के चलाने के अंत में इनपुट प्राप्त कर रहा है। यह यह उल्लेख करने के लिए सहायक हो सकता है कि यह कौन सा सटीक आदेश है।

+0

आपने एक उत्कृष्ट बिंदु का उल्लेख किया है! मैं फ्लशिंग के बारे में भूल गया। आदेश मेरे अपने सी कार्यक्रम में से एक है। मैंने अपने printf के बाद fflush जोड़ा। अब यह काम कर रहा है। तत्काल सहायता के लिए बहुत बहुत धन्यवाद। – Rakib

+0

@ राकिब हसन: खुशी है कि यह अब आपके लिए काम करता है। यह विभिन्न स्क्रिप्टिंग भाषाओं में भी अनदेखा व्यवहार है। – 0xC0000022L

0

आप अपने उपयोग पोस्ट करने के लिए मैं एक बेहतर जवाब दे सकता है, लेकिन के रूप में यह है

(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp 

टी आदेश की समुचित उपयोग है और काम करने के लिए लगता है तो। अपने आदेश के साथ पाइप से पहले भाग को बदलें और आपको जाने के लिए अच्छा होना चाहिए।

1

आपको जिस समस्या का सामना करना पड़ रहा है वह शायद बफरिंग से संबंधित है। आप stdbuf कमांड पर एक नज़र डाल सकते हैं, जो निम्न करता है:

stdbuf - इसके मानक धाराओं के लिए संशोधित बफरिंग संचालन के साथ COMMAND चलाएं।

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