是否可以通过以下组合打印shell命令的执行时间?
root@hostname:~# "command to execute" && echo "execution time"
Answers:
不要忘记,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
help time
因为我只看了一眼,并且认为它是命令行参数。我将更新答案。
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
time
使用毫秒。而且,如果您希望将少数几个命令一起计时而不必使用变量和计算,则可以使用括号:time ( command1 ; command2 ; command3 )
您甚至可以将它们与总时间一起单独计时,如下所示:time ( time command1 ; time command2 ; time command3 )
当然,如果要使用二十个命令,可能最好使用此答案的解决方案。但是,然后,您应该开始考虑将所有命令都放在脚本中……
在zsh中,您可以使用
=time ...
在bash或zsh中,您可以使用
command time ...
这些(通过不同的机制)强制使用外部命令。
只是 ps -o etime= -p "<your_process_pid>"
man bash
:“ TIMEFORMAT变量可以设置为指定应如何显示计时信息的格式字符串”