打印shell命令的执行时间

时间:2009-11-01 04:49:54

标签: shell command-line

是否可以使用以下组合打印shell命令的执行时间?

root@hostname:~# "command to execute" && echo "execution time"

8 个答案:

答案 0 :(得分:100)

time是大多数shell中的内置命令,它将执行时间信息写入tty。

您也可以尝试类似

的内容
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.

bash

start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s

答案 1 :(得分:64)

不要忘记bash的内置time(在执行time command时应默认调用)和/usr/bin/time(应该要求您调用它)之间存在差异完整的路径。)

内置time始终打印到stderr,但/usr/bin/time将允许您将时间输出发送到特定文件,因此您不会干扰已执行命令的stderr流。此外,/usr/bin/time的格式可在命令行上由环境变量TIME配置,而bash的内置time格式仅 TIMEFORMAT环境变量配置。

$ time factor 1234567889234567891 # builtin
1234567889234567891: 142662263 8653780357

real    0m3.194s
user    0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps

答案 2 :(得分:23)

root@hostname:~# time [command]

它还区分实际使用时间和使用的系统时间。

答案 3 :(得分:10)

对于逐行增量测量,请尝试gnonom

  

这是一个命令行实用程序,有点像moreutils的ts,用于将时间戳信息添加到另一个命令的标准输出中。对于长期运行的流程非常有用,在这些流程中,您需要了解长期运行的历史记录。

     

向gnomon输入任何内容都会在每行前加一个时间戳,表示该行是缓冲区中最后一行的长度 - 也就是下一行显示的时间长度。默认情况下,gnomon将显示每行之间经过的秒数,但这是可配置的。

gnomon demo

答案 4 :(得分:7)

添加@ mob&#39的回答:

%N追加到date +%s可以获得纳秒精度:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`

答案 5 :(得分:4)

如果我开始像拷贝或哈希那样长时间运行的过程,我想知道它花了多长时间,我就这样做了:

$ date; sha1sum reallybigfile.txt; date

这将产生以下输出:

Tue Jun  2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0  reallybigfile.txt
Tue Jun  2 21:33:54 PDT 2015

当然,这里实施的它不是很精确,也不计算经过的时间。但它很简单,有时你需要它。

答案 6 :(得分:3)

在zsh中你可以使用

=time ...

在bash或zsh中你可以使用

command time ...

这些(通过不同的机制)强制使用外部命令。

答案 7 :(得分:0)

ps -o etime= -p "<your_process_pid>"