Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

How can I write a shell script that shows the results in real time?

Something like the top command that updates the results after some fixed intervals of time.

alt text

share|improve this question
6  
probably using a curses interface... but I think this is more heavily a programming question and belongs on SO –  xenoterracide Aug 28 '10 at 17:21
add comment

5 Answers

up vote 7 down vote accepted

It would help if you were a lot more specific about what you are trying to do.

Here is an extremely simplistic example:

while true
do
    clear
    date
    sleep 1
done
share|improve this answer
add comment

top uses Curses and reads the /proc file system

share|improve this answer
    
Except on systems that don't have /proc. Another way to get the information is sysctl(8)/sysctl(3). –  Chris Page Jun 25 '12 at 6:13
add comment

you can use the watch(1) command to run your script at regular intervals:

watch -n 1 myscript.sh

This will run myscript.sh every 1 second clearing the screen between each run and with a timestamp in the corner. You can use the -d option and it will even highlight differences in the output per run.

share|improve this answer
    
I was just thinking of how to answer it using watch. –  Kevin M Aug 30 '10 at 2:51
    
I don't have watch. Could you be more specific? What OS? –  Chris Page Jun 25 '12 at 6:10
add comment

Erm, in case you're looking at top output for a longer time, and not just to check if a program is doing fine, I suggest using htop.

It give's you a lot of real time information and is easier to control and manage.

You can change the layout of the output, such as bar graphs and columns.

share|improve this answer
    
I believe he is asking how to write an app that polls at regular intervals not about top or htop specifically. –  Chris Aug 30 '10 at 10:18
add comment

Most of that data is generally exposed in the /proc virtual file-system primitives. Each process has an entry in /proc in a directory called the PID. So /proc/5437 would have the primitives for the 5437 process. Reading the primitives there and parsing appropriately would yet you close to what top does.

Top actually works by calling specific function calls that extract this information directly from the kernel instead of pulling it from files. To do the same from bash you'd have to either pull it from the /proc virtual file system, or extract it out of other calls such as to ps.

As for real-time, that isn't quite doable at the level of detail top provides. You can slice time fine enough that it appears to be real-time, but you will still be getting time-slices.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.