2013-03-30 7 views
7

लिनक्स में, stdout लाइन को आदेश है, मैं ऐसे apt-get आउटपुट के रूप में विशिष्ट क्षेत्र अद्यतन करने के लिए, चाहते हैं:कमांड लाइन आउटपुट को कैसे अपडेट करें?

54% [Waiting for headers] [Waiting for headers]  211 kB/s 3s 

प्रतिशत, kB/s और दूसरा प्रत्येक दूसरा अद्यतन करेगा।

यदि हम printf का उपयोग करते हैं तो हमें उन्हें कई लाइन आउटपुट मिलेंगे। मैंने printf का पालन करने का प्रयास किया है:

printf("\e[1;1H\e[2J"); 

लेकिन यह सभी आउटपुट को साफ़ करता है।

मेरा प्रश्न यह है कि विशिष्ट क्षेत्र को कैसे अपडेट करें और दूसरों को स्थिर रखें?

उत्तर

7

कैरिज रिटर्न का उपयोग करें। यह कर्सर को लाइन की शुरुआत में वापस ले जायेगा, जिससे आप पहले लाइन में क्या ओवरराइट कर सकते हैं। उदाहरण के लिए:

printf("Hello, world!\rX"); 

देखी जा सकेगी के रूप में:

Xello, world! 

सुनिश्चित करें कि आप फ्लश stdout अक्सर अगर आप इसे दिखाई देना चाहते हैं: (उपयोगी \r की

fflush(stdout); 
+0

आप पंक्ति को साफ़ करने के लिए '\ 027 के बाद' \ 027 [k' 'जोड़ना चाहेंगे। यह एएनएसआई टर्मिनल एस्केप अनुक्रम मानता है, जो अधिकांश टर्मिनलों का समर्थन करता है। – lhf

3

इसके अलावा & fflushadvice उपरोक्त), यदि आप एक पूर्ण स्क्रीन कंसोल आउटपुट चाहते हैं, तोका उपयोग करने पर विचार करें। यदि आप एक संपादन योग्य इनपुट लाइन चाहते हैं, तो GNU readline लाइब्रेरी भी उपयोगी है!

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