打印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的回答:

追加%Ndate +%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的。

gnomon演示

如果我开始像复制或哈希这样的长期运行过程,我想知道多久,我只是这样做:

 $ 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 ... 

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