我试图重定向 time 命令的输出,但我不能:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在文件中,我可以看到ls
命令的输出,而不是time
. 请解释一下,为什么我不能以及如何做到这一点。
我试图重定向 time 命令的输出,但我不能:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在文件中,我可以看到ls
命令的输出,而不是time
. 请解释一下,为什么我不能以及如何做到这一点。
无需启动子外壳。使用代码块也可以。
{ time ls; } 2> out.txt
或者
{ time ls > /dev/null 2>&1 ; } 2> out.txt
您可以使用重定向时间输出,
(time ls) &> file
因为您需要将 (time ls) 作为单个命令,因此您可以使用大括号。
命令时间将其输出发送到 STDERR(而不是 STDOUT)。这是因为随着时间正常执行的命令(在本例中为 ls)输出到 STDOUT。
如果要捕获时间的输出,请键入:
(time ls) 2> filename
这仅捕获时间的输出,但 ls 的输出正常到控制台。如果您想在一个文件中捕获两者,请键入:
(time ls) &> filename
2> 重定向 STDERR,&> 重定向两者。
time 是 shell 内置的,我不确定是否有办法重定向它。但是,您可以
/usr/bin/time
改用它,它肯定接受任何输出重定向。
重定向似乎不起作用的原因time
是它在管道前面使用时是 bash 保留字(不是内置字!)。重击(1):
如果时间保留字在管道之前,则在管道终止时报告其执行所消耗的已用时间以及用户和系统时间。
因此,要重定向 的输出time
,请使用花括号:
{ time ls; } 2> filename
或致电/usr/bin/time
:
/usr/bin/time ls 2> filename
如果您不想混合输出time
和命令。使用 GNU 时间,您可以-o file
像这样使用:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
whiletim
是时间的输出,out
是err
来自grep
.
我使用带有大括号的 stdout 和 stderr 方法的重定向进行测试。代表这个
但更短。
大括号将在当前 shell 中执行命令。参见:人 bash&>>rpt
>>rpt 2>&1
{ time ls a*; } &>>rpt