关于unix:如何将time函数的输出重定向到变量

How to redirect the output of time function to a variable

我有以下问题需要你的帮助来解决。我有一个函数,让我们称它为"fun",我想计算函数需要运行的时间,所以我在脚本中添加了这一行:

1
time fun;

所以像这样,它还将打印运行函数所需的时间。重点是,我想将time的输出重定向到一个变量中,这样我可以在稍后根据需要对其进行操作。我的失败尝试已经:

1
2
3
TIME=`time fun`
time fun | tail -3
etc..

是否有人知道如何做到这一点,例如,期望的结果是:

1
somehow add the time output in TIME variable.

所以如果我愿意的话我会得到这样的结果,

1
2
3
real    0m0.45s
user    0m0.35s
sys     0m0.00s

谢谢你抽出时间来!!

附笔。

我在ksh上运行脚本,在Oracle Solaris系统上运行。


您可以使用什么?如何将"时间"的输出重定向到变量或文件?描写:

1
your_time=$( { time fun ; } 2>&1 >/dev/null)

这里我们将stdout重定向到/dev/null,这样我们就可以摆脱它,只需要得到stderr。这是一种特殊情况:

1
foo=$( { time ls; } 2>&1 )            # More efficient version.

试验

我们将访问ls两个文件:一个存在(myfile文件),另一个不存在(asdfjasdkfl文件)。

1
2
3
4
5
6
7
8
$ touch myfile
$ time_info=$( { time ls myfile asdfjasdkfl; } 2>&1 >/dev/null)
$ echo"$time_info"
ls: cannot access asdfjasdkfl: No such file or directory

real    0m0.003s
user    0m0.000s
sys 0m0.000s


命令:

1
variable=$(time fun)

例子:

1
2
var=$(time ls -l) ## or var="$(time ( ls -l ) 2>&1 >/dev/null )"
echo"$var"

输出:

1
2
3
4
##displays output of ls command and the time taken
real    0m0.003s
user    0m0.001s
sys     0m0.001s

替代方法:

直接在脚本的执行语句中使用time

示例:time ./fun