Shell脚本可以从' time'并保存到变量

时间:2017-10-14 16:50:11

标签: shell

我试图为我的程序制作一个shell脚本,多次花费时间,然后除以得到它执行的平均时间。

我尝试过的是:

time [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 | grep real | awk '{print $2}'

基本上我想删除程序的输出,所以我试图将输出重定向到null。我也想删除时间的输出。它几乎没有工作,我还需要将结果保存在变量中,以便我可以在循环中运行它。有什么想法可以做到吗?

2 个答案:

答案 0 :(得分:0)

注意:“时间”可以是内置的shell。调用/ usr / bin / time或使用env来避免内置并获得正确的管道和输出行为:

env time bash -c './finder >/dev/null' 2>&1 | awk '$2 == "real" {print $1}'

此外,将1指向null,然后立即将2指向同一位置会很糟糕。

您可以使用反引号括起来并分配给变量,或者为了更简单的标点符号重定向到临时文件,然后使用:

ELAPSED=`cat time.txt`

以下是awk解析的一些示例输出:

$ env time pwd
/tmp
        0.01 real         0.00 user         0.00 sys

如果您更喜欢POSIX输出,可以传递-p开关:

$ env time -p pwd
/tmp
real         0.01
user         0.00
sys          0.00

这是在变量中获取原始时间stderr输出的一种方法:

$ TIME=`env time pwd 2>&1 | tail -1`
$ echo $TIME
0.00 real 0.00 user 0.00 sys

答案 1 :(得分:0)

通过“中间”临时文件和格式 -f选项:

real_time_val=$(/usr/bin/time -f "%e" -o tmpfile [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 && cat tmpfile)
  • %e - 流程使用的实际(挂钟)时间,以秒为单位。

  • -o FILE - 将资源使用统计信息写入FILE而不是标准错误流

示例性结果:

$ echo "$real_time_val" 
0.02