获取输出到 /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 的命令的执行时间的主要内容,如果未能解决你的问题,请参考以下文章

shell里判断返回值的问题

如何让 linux 命令 不输出结果

Linux shell

通过curl命令获取http的状态吗

如果命令输出重定向到日志文件,则cron停止发送错误邮件

在shell里面>&2是啥意思?