如何重定向“时间”命令的输出?


95

我试图重定向time命令的输出,但是我不能:

$time ls > filename
real    0m0.000s
user    0m0.000s
sys     0m0.000s

在文件中,我可以看到ls命令的输出,而不是的输出time。请说明,为什么我不能以及如何做到这一点。


1
我认为应该是超级用户。
Mnementh'3

1
这个问题的答案不仅使程序员感兴趣,而且也使其他高级用户感兴趣:superuser.com
Mnementh,2010年

Answers:


104

您可以使用以下方式重定向时间输出,

(time ls) &> file

因为您需要将(time ls)作为单个命令,所以可以使用花括号。


1
是很好,但是问题是他们是如何做的?
abubacker 2010年

2
time命令将参数作为命令。但是括号会将其分组为一个命令。例如:time ls> file1.txt在参数中,0 =时间1 =“ ls> file1.txt”
sganesh 2010年

8
然后time命令在stderr中输出输出。因此,您可以使用(time ls)2>文件
sganesh 2010年

5
&>请澄清一下,我在哪里可以了解到这些?
hello_there_andy

3
@hello_there_andy &>file与相似>file 2>&1。它同时指示stdout和stderr。
ktbiz

129

无需启动sub shell。使用代码块也可以。

{ time ls; } 2> out.txt

要么

{ time ls > /dev/null 2>&1 ; } 2> out.txt

1
同意,最佳答案。使您可以选择放弃ls结果并获得时间。谢谢ghostdog74
rd42 2011年

1
当没有什么东西可以重定向“ hostent”命令的输出时,它可以与AIX一起使用。谢谢!
雨果

1
2>请澄清。我在哪里可以了解这些?
hello_there_andy

3
如果同时要>和2>怎么办?
豪尔赫·费尔南德斯

25

命令时间将其输出发送到STDERR(而不是STDOUT)。这是因为通常按时间执行的命令(在本例中为ls)输出到STDOUT。

如果要捕获时间的输出,请键入:

(time ls) 2> filename

那仅捕获时间的输出,但是ls的输出在控制台上正常。如果要同时捕获两个文件,请键入:

(time ls) &> filename

2>重定向STDERR,&>都重定向。


1
这个答案实际上回答了为什么 OP的重定向不起作用,这是OP所问的问题之一。没有人解决这个问题。
NeutronStar '16

一个管道如何将其与此管道相连?
Paul

10

time是shell内置的,我不确定是否可以重定向它。但是,您可以 /usr/bin/time改用它,它肯定会接受任何输出重定向。


/ usr / bin / time --output filename ls
chub 2010年

4
内置时间与输出重定向配合得很好。它仅在STDERR上输出,而不在STDOUT上输出。
Mnementh'3

问题在于内置命令是在Shell环境本身而不是子Shell中执行的。由于shell的stderr通常连接到终端,因此重定向不会做任何事情。要重定向内置时间,我相信您必须执行bash time mycmd 2>file。或者只是/usr/bin/time如前所述打电话。
ktbiz


4

如果您不想混合来自time和命令的输出。使用GNU时间,您可以-o file像这样使用:

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

tim是时间输出,outerr从输出和错误grep


4

重定向似乎不起作用的原因time是,它在管道之前使用时是bash保留字(不是内置的!)。bash(1):

如果时间保留字在管道之前,则在管道终止时将报告其执行所消耗的时间以及用户和系统所花费的时间。

因此,要重定向的输出time,请使用大括号:

{ time ls; } 2> filename

或致电/usr/bin/time

/usr/bin/time ls 2> filename

0

我使用带有括号的stdout和stderr方法的重定向进行测试。
&>>rpt代表这个>>rpt 2>&1,但更短。
花括号将在当前shell中执行命令。另请:man bash

{ time ls a*; } &>>rpt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.