打印shell命令的执行时间
用下面的组合可以打印shell命令的执行时间吗?
root@hostname:~# "command to execute" && echo "execution time"
不要忘记,bash的内buildtime
(在执行time command
时应该被默认调用)和/usr/bin/time
(它们应该要求您以完整path调用它)之间存在差异。
内置time
总是打印到stderr,但/usr/bin/time
将允许您将时间输出发送到特定文件,因此您不会干扰执行的命令的stderrstream。 另外, /usr/bin/time
的格式可以在命令行或环境variablesTIME
,而bash的内置time
格式只能由TIMEFORMAT
环境variablesconfiguration。
$ 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
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
root@hostname:~# time [command]
它还区分使用的实时使用和系统时间。
join@ mob的回答:
追加%N
到date +%s
给我们纳秒精度:
start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
对于逐行增量测量,请尝试gnonom 。
它是一个命令行实用程序,有点像moreutils的ts,将时间戳信息添加到另一个命令的标准输出。 对于长时间运行的stream程非常有用,在这个stream程中,您需要一个历史logging来logging如此长的时间
给gnomonpipe道任何东西都会在每一行预先加上一个时间戳,表明这行是多less时间才是缓冲区的最后一行 – 也就是下一行出现的时间。 默认情况下,gnomon将显示每行之间所经过的秒数,但这是可configuration的。
如果我开始像复制或哈希这样的长期运行过程,我想知道多久,我只是这样做:
$ date; sha1sum reallybigfile.txt; date
这将导致以下输出:
Tue Jun 2 21:16:03 PDT 2015 5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt Tue Jun 2 21:33:54 PDT 2015
诚然,在这里实施它不是很精确,不计算经过的时间。 但它很简单,有时候只是你所需要的。
在zsh中可以使用
=time ...
在bash或zsh中可以使用
command time ...
这些(通过不同的机制)迫使外部命令被使用。