Bash 计算执行时间
Posted
技术标签:
【中文标题】Bash 计算执行时间【英文标题】:Bash counting executed time 【发布时间】:2018-01-28 18:28:18 【问题描述】:我想在 bash 中编写一个脚本,它将执行多长时间保存到文件中
我希望输出如下所示:
1 minute
2 minute
...
【问题讨论】:
目标是您添加一些自己的代码,以至少展示您为解决这个问题所做的研究工作。 您需要更详细地描述您的环境以及到目前为止您已完成的工作,如上述建议。您也可以使用 Google 搜索解决方案,因为这是一项非常简单的任务,只需进行一些研究即可完成。 此链接对您有帮助 [***.com/questions/385408/… Get program execution time in the shell的可能重复 使用命令'time [your_command]',它会准确计算命令的执行时间 【参考方案1】:要求
你需要安装time
(不是内置的shell)。
验证您是否拥有正确的:$ which time
这是预期的输出:
$ which time
/usr/bin/time
解决方案
假设您有一个名为 main
的函数,其中包含您的主要脚本代码
function main()
echo "Sleeping .."
sleep(5)
echo "This is the first arg: $1"
echo "This is the second arg: $2"
要对该函数调用计时,请执行以下操作(参数供参考):
main "HELLO" "WORLD" | $(which time) -o "OUTPUT_FILENAME_FOR_TIME" -f "%e" $(which bash)
说明
我们正在将 /usr/bin/time 传递给函数调用来计时。我们使用$(which time)
调用time
,因为我们不希望shell 内置。之后我们传递-o
参数来定义我们的输出文件,然后-f
参数用于定义时间格式。在我的示例中,我使用了秒。最后,我们传递了我们正在使用的shell,在我们的例子中我们使用的是bash,所以$(which bash)
。
man time
了解其他格式,当然还有程序的正确用法我总是使用秒,因为它更容易将它们转换为任何东西。
编辑#1
您可以使用 GNU 工具 command
而不是使用 time
的绝对路径
$ command time
而不是
$ $(which time)
【讨论】:
使用 /usr/bin/time 比 shell 内置有什么好处? @user1934428 你可以阅读this 嗯....虽然这篇文章很有趣,但我不知何故错过了重点。文章确实一句话GNU的时间,/usr/bin/time,通常比内置的更有用,但是没有给出任何解释,在什么方面更有用。相反,它详细(并且很好地)解释了内置(又名 bash 时间)提供了比 gnu 时间更高的精度。这宁愿成为支持 bash 时间的论据(但不适用于这里的问题,因为 OP 只需要精确到分钟的分辨率)。 @user1934428 根据我对time
命令用法的经验:要使用内置time
编写时间日志文件,您必须将stdout 和stderr 重定向到文件(somecommand &> time.log
)。在这种情况下,您有精确度,但如果 somecommand
产生任何错误,这将被写入您的 time.log 中,这是您不希望发生的事情。另一方面,/usr/bin/time
不太精确,但您可以通过参数控制输出,使用可以使用 -f 选项或 TIME 环境变量指定的格式字符串格式化输出等等。
@user1934428 我再次发表评论(没有剩余字符)。 注意:不太精确,大约 0.0X
秒,其中 X
是一个整数。 此外,要将秒转换为分钟,可以使用 BASH 数学:VAR=$(( X - Y ))
,bc
命令,或类似python
。以上是关于Bash 计算执行时间的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu说“bash:./program Permission denied”[关闭]
Docker 命令在 Windows 上的 Git Bash 中不起作用(执行:“com.docker.cli”:在 %PATH% 中找不到可执行文件)