如何redirect“时间”命令的输出?

我试图redirect时间命令的输出,但我不能:

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

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

你可以重定向使用的时间输出,

 (time ls) &> file 

因为你需要(时间ls)作为一个单一的命令,所以你可以使用大括号。

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

 { time ls; } 2> out.txt 

要么

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

命令时间将其输出发送到STDERR(而不是STDOUT)。 这是因为正常执行的命令(在这种情况下是ls)会输出到STDOUT。

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

 (time ls) 2> filename 

这只捕获时间的输出,但是ls的输出正常于控制台。 如果要在一个文件中捕获两个文件,请键入:

 (time ls) &> filename 

2>重定向STDERR,&>重定向两者。

时间是shell内建的,我不确定是否有方法重定向它。 但是,您可以使用/usr/bin/time ,它可以接受任何输出重定向。

如果你不想混合time和命令的输出。 有了GNU时间,你可以使用-o file如:

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

tim是输出的时间, outerr是stdout和stderr从grep