我试图重定向时间命令的输出,但我不能。如何重定向“时间”命令的输出?
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在该文件中,我可以看到ls
命令的输出,不就是time
。 请解释,为什么我不能以及如何做到这一点。
我试图重定向时间命令的输出,但我不能。如何重定向“时间”命令的输出?
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在该文件中,我可以看到ls
命令的输出,不就是time
。 请解释,为什么我不能以及如何做到这一点。
时间是shell内建的,我不确定是否有方法重定向它。但是,您可以使用 /usr/bin/time
,它可以接受任何输出重定向。
/usr/bin/time --output filename ls – chub 2010-03-09 12:39:50
内置时间与输出重定向一起工作良好。它只在STDERR上输出,而不在STDOUT上输出。 – Mnementh 2010-03-09 13:09:40
问题是内置命令是在shell环境本身内执行的,而不是一个子外壳。由于您的shell的stderr通常连接到终端,重定向不会执行任何操作。为了重定向内置时间,我相信你必须做一些像'bash time mycmd 2> file'一样的东西。或者像上面提到的那样调用'/ usr/bin/time'。 – ktbiz 2017-08-17 02:36:20
命令时间将其输出发送到STDERR(而不是STDOUT)。这是因为正常执行的命令(在本例中为ls)会输出到STDOUT。
如果你想捕捉的时间输出,然后键入:
(time ls) 2> filename
捕捉只是时间的输出,但LS的输出变为正常的控制台。如果你想同时捕获在一个文件中,键入:
(time ls) &> filename
2>重定向STDERR,&>重定向两者。
这个答案实际上回答了*为什么* OP的重定向不起作用,这是OP要求的问题之一。没有其他人解决这个问题。 – Joshua 2016-06-01 14:27:40
如果你不想输出time
和命令混合。 随着GNU的时候,你可以使用-o file
,如:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
而tim
是时间输出,out
和err
从grep
输出和错误。
重定向似乎不适用于time
的原因是它在流水线前使用时是bash保留字(不是内建的!)。的bash(1):
如果时间保留字之前的管线,通过其执行中所消耗的经过以及 用户和系统时间被报告的 管道终止时。
所以,重定向的time
输出,要么使用大括号:
{ time ls; } 2> filename
或致电/usr/bin/time
:
/usr/bin/time ls 2> filename
应该对超级用户,我想。 – Mnementh 2010-03-09 13:06:05
我不这么认为! – abubacker 2010-03-09 13:11:00
这个问题的答案不仅对程序员感兴趣,而且对其他高级用户也很感兴趣:http://superuser.com/ – Mnementh 2010-03-09 13:14:05