我试图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
是输出的时间, out
和err
是stdout和stderr从grep
。