获取输出到 /dev/null 的命令的执行时间
Posted
技术标签:
【中文标题】获取输出到 /dev/null 的命令的执行时间【英文标题】:Get execution time of command which has output to /dev/null 【发布时间】:2020-03-10 17:42:45 【问题描述】:我正在尝试获取命令执行的实时时间(以秒为单位),但没有打印命令输出。我的问题是时间会解释“1>/dev/null 2>/dev/null”,它们是命令的一部分,就像部分时间一样,所以我没有输出。
示例(我要执行的命令比较复杂):
/usr/bin/time -f "%e" -p ls 1>/dev/null 2>/dev/null
所以我想知道是否有办法将命令与时间命令隔离,只需要执行时间,而不是命令输出所需的其他信息我正在测量执行时间。
我知道可以用这小段代码来衡量它。
start=`date +%s`
command
end=`date +%s`
runtime=$((end-start))
但只是怀疑它是否可以用 time 命令以我不知道的本地方式完成。
【问题讨论】:
你的shell真的是bash吗? (如果是这样,你有一个内置版本的time
可用,如果你选择不使用/usr/bin/time
之一)。
...也就是说,如果你省略了/usr/bin
,你可以在bash中运行time ls >/dev/null 2>&1;
。
【参考方案1】:
在 shell 上独立完成的一种方法是:
/bin/time -o my_file.txt my_command 1>/dev/null 2>/dev/null
或
/bin/time -o /dev/tty my_command 1>/dev/null 2>/dev/null
【讨论】:
取决于你在哪个平台上; MacOS/usr/bin/time
没有-o
。【参考方案2】:
如BashFAQ #32 中所述,您可以捕获来自time
的bash 内置版本的输出(请注意,我们不使用下面的/usr/bin/time
):
time_result=$( TIMEFORMAT='%R'; time ls 1>&3- 2>&4-; 2>&1 ); 3>&1 4>&2
【讨论】:
以上是关于获取输出到 /dev/null 的命令的执行时间的主要内容,如果未能解决你的问题,请参考以下文章