2013-03-30 85 views
7

在Linux中,雖然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的時候,如果你希望它是可見:

fflush(stdout); 
+0

您可能希望在'\ r'之後添加'\ 027 [k']以清除該行。這假定ANSI終端轉義序列,大多數終端支持。 – lhf

3

另外(的有用\r & fflushadvice以上),如果您想要全屏控制檯輸出,請考慮使用ncurses。如果你想要一個可編輯的輸入行,GNU readline庫也很有用!