How to redirect the output of time function to a variable
我有以下问题需要你的帮助来解决。我有一个函数,让我们称它为"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系统上运行。
- 如何将输出重定向到此shell函数中的变量的可能副本?
- @动画片和你所说的那个有什么关系?我在问关于time函数的问题,并将其重定向到一个变量…耶稣…还有,那是在巴什,我在问关于克什……
- 时间函数对您有效,您的问题在于重定向输出,这实际上是上述问题的一个副本。
- @不,这不是复制品。time的行为不同,因此在您链接的问题中提供的解决方案在这里没有用处。测试它,并测试我对交叉检查的答案。
- 亲爱的@animenon你还没看见是吗?我已经试过了,你可以在我的帖子上看到答案,但我也看到你没有费心去读。如果我想得到对我来说很好的函数的输出,尽管我需要某种方式来了解时间的返回,而这不可能以这种方式完成,请看Fedorqui给我的解决方案,这实际上也是我正在寻找的,并将其与您标记为dubilic的帖子中选择的答案进行比较。不是同一件事,亲爱的:)
- 刺猬很酷。@fedorqui是的,重定向就在这里。
您可以使用什么?如何将"时间"的输出重定向到变量或文件?描写:
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 |
- 好吧,我不能打开你发给我的链接,因为我的电脑有一个brower的白名单。但我只是尝试了你推荐的方法,而且效果很好,因为你一直都是有针对性的高效和正确的!谢谢!
- 我知道你在我的帖子btw上所做的编辑是什么意思,但我只是添加了它,因为很多时候人们不必费心去阅读你的标签,也不必为其他语言提供答案,比如ksh-bash,这就是为什么我在帖子中添加了它:)tnx无论如何
- @刺猬没问题。正在回滚我的编辑!
- 没问题,伙计,真的,不管怎么说,这篇文章的答案是……
- 关于这件事,我还有一个问题要问你……我照你说的做了,一切都很好,所以现在看起来是这样的。TIME1=$( { time awkfun ; } 2>&1 >/dev/null);……但现在的一个问题是,awkfun实际上正在打印一些东西,但是现在如果我像这样使用它,它正在运行,我会花时间,但它不会打印这些东西……有什么建议吗????
- @刺猬,你可以查一下tee。
- 我明白了,这是可以做到的,尽管在我需要存储输出的情况下,我需要它做的只是在终端上打印。因为我使用/dev/null递归时间输出的那一刻,将要输出某些内容的函数awkfun的实际功能就消失了。我真的不明白为什么只要整个脚本运行,它就不打印它了。还有什么想法吗?
- @刺猬,这听起来像你应该问一个新的问题,里面有所有的细节,因为它离这个问题很远!
命令:
例子:
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
- 嗯,首先,你给出的例子不起作用,我已经试过了,你可以在我的帖子里看到,其次,我在讲一个脚本中的一个函数,我不是在讲一个完整的脚本,整个脚本中有很多东西,所以我不能用这样的时间,它必须用于一个函数。
- 我举的例子是在一个脚本中进行的,它可以工作。您也可以这样运行:mytime="$(time ( ls -l ) 2>&1 >/dev/null )",然后打印它echo $mytime。
- 我没说你的剧本不管用,我说这对我不管用。因为它不做我所需要的,因为时间有着不同的功能行为。不管怎样,费多基已经在你面前回答了,不过还是谢谢你的回复。
- @刺猬凉了。感谢编辑费多基。