Solved

Bash script: How can I measure how long the script takes to run without doing anything outside the script?

Posted on 2008-06-13
10
1,879 Views
Last Modified: 2013-11-15
Hi,

How can I achieve these two things in a bash script:

1) Measure and echo how long individual functions inside the script take to run

2) Measure and echo how long the entire script takes to run

**Note: I would like to achieve these without having to do anything outside the script if possible.  I only want to have this main script.  I don't want to have to keep track of a script to call this script etc.

Thanks,
0
Comment
Question by:tate1615
10 Comments
 
LVL 40

Expert Comment

by:omarfarid
ID: 21781456
you may use the command time for this

time scriptname
0
 

Author Comment

by:tate1615
ID: 21781495
Right, I could use the command line.
But how can I achieve these time measurements within the script?

For example, The script will output to a logfile:
Function X took 3 seconds
Function Y took 5 minutes
Script Finished! Script took 22 minutes
0
 
LVL 84

Expert Comment

by:ozo
ID: 21782431
in a tcsh script, you could
set time=0
0
Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

 
LVL 48

Accepted Solution

by:
Tintin earned 175 total points
ID: 21782442
Here's a primitive way of doing it
#!/bin/bash
script_start=$(date +%s)
LOG=time.log
 
 
duration()
{
  start=$(date +%s)
  $*
  finish=$(date +%s)
  let total="$finish - $start"
  echo "Function $1 took $total seconds" >>$LOG
}
 
foo()
{
  echo foo
  sleep 2
}
 
duration foo
 
script_finish=$(date +%s)
let total="$finish - $start"
echo "Script Finished!  Script took $total seconds" >>$LOG

Open in new window

0
 
LVL 9

Expert Comment

by:ghostdog74
ID: 21784015
you can use time in your script.

foo()
{
  echo foo
  sleep 2
}
time foo

Open in new window

0
 
LVL 48

Expert Comment

by:Tintin
ID: 21784042
I was going to suggest 'time', but the output isn't really what is required.  On Linux systems, /usr/bin/time (as opposed to the bash time builtin) is very flexible with the time output, but unfortunately you can't use it to time functions.
0
 
LVL 9

Expert Comment

by:ghostdog74
ID: 21784201
why not, since time is built in to bash?  IMO, i think calling external command like date is not accurate at all.
  foo()
    {
    echo foo
    ls -l
    }
 
 
time {
 foo
} 
 

Open in new window

0
 
LVL 48

Expert Comment

by:Tintin
ID: 21784439
As previously mentioned, the bash time builtin doesn't have any options to format the output, whereas the time executable does, but the time executable won't recognise shell functions.  Run the following code to see what I mean.


#!/bin/bash
 
foo()
{
  echo foo
  sleep 1
}
 
 
time foo
/usr/bin/time -f "Function foo took %e to run" foo

Open in new window

0
 
LVL 9

Assisted Solution

by:ghostdog74
ghostdog74 earned 175 total points
ID: 21784551

foo()
{
  echo foo
  sleep 1
}
( time foo ) 2>&1 | awk '/real/{print "Took "$2}'

Open in new window

0
 

Expert Comment

by:troyswildride
ID: 22966224
The assisted solution does a nice job of timing the function but it does not display output to the screen.

OUTPUT:
$ './test.sh'
Took 0m1.007s

EXPECTED OUTPUT:
$ './test.sh'
foo
Took 0m1.007s

Why does the echo not display on the screen?
If that can work this is exactly what I'm looking for.

cheers.
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In our personal lives, we have well-designed consumer apps to delight us and make even the most complex transactions simple. Many enterprise applications, however, are a bit behind the times. For an enterprise app to be successful in today's tech wo…
The article will include the best Data Recovery Tools along with their Features, Capabilities, and their Download Links. Hope you’ll enjoy it and will choose the one as required by you.
XMind Plus helps organize all details/aspects of any project from large to small in an orderly and concise manner. If you are working on a complex project, use this micro tutorial to show you how to make a basic flow chart. The software is free when…
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question