Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to update command line output?

In Linux, While stdout to command line, I want to update specific area, such as the apt-get output:

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

the percentage, kB/s and second will update each second.

If we use printf then we will get multiple lines output them. I have tried following printf:

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

But it cleans all the output.

My question is how to update specific area and keep others stable?

like image 393
coanor Avatar asked Mar 30 '13 02:03

coanor


1 Answers

Use the carriage return. It will move the cursor back to the start of the line, from which you can overwrite what was in the line before. For example:

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

Will be visible as:

Xello, world!

Make sure you flush stdout often if you want it to be visible:

fflush(stdout);
like image 169
icktoofay Avatar answered Sep 27 '22 18:09

icktoofay