如何重定向“时间”命令的输出?
Posted
技术标签:
【中文标题】如何重定向“时间”命令的输出?【英文标题】:How can I redirect the output of the "time" command? 【发布时间】:2011-01-25 10:10:11 【问题描述】:我试图重定向 time 命令的输出,但我不能:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
在文件中我可以看到ls
命令的输出,而不是time
的输出。
请解释一下,为什么我不能以及如何做到这一点。
【问题讨论】:
我认为应该是超级用户。 这个问题的答案不仅对程序员感兴趣,对其他高级用户也很感兴趣:superuser.com Is there a way to redirect time output to file in Linux的可能重复 【参考方案1】:您可以使用重定向时间输出,
(time ls) &> file
因为您需要将 (time ls) 作为单个命令,因此您可以使用大括号。
【讨论】:
是的,很好,但问题是他们是怎么做到的? time 命令将参数作为命令。但是括号会将其分组为一个命令。例如:time ls > file1.txt 在参数中,0 = time 1 = "ls > file1.txt" 并且 time 命令在 stderr 中打印输出。所以你可以使用 (time ls) 2> file 请澄清&>
,我在哪里可以了解这些?
@hello_there_andy &>file
类似于 >file 2>&1
。它同时指示标准输出和标准错误。【参考方案2】:
time 是 shell 内置的,我不确定是否有办法重定向它。但是你可以使用
/usr/bin/time
相反,它肯定接受任何输出重定向。
【讨论】:
/usr/bin/time --输出文件名ls 内置时间与输出重定向配合得很好。它只在 STDERR 上输出,而不是在 STDOUT 上。 问题是内置命令是在 shell 环境本身中执行的,而不是子 shell。由于你的 shell 的 stderr 通常连接到终端,重定向不会做任何事情。要重定向内置时间,我相信您必须执行bash time mycmd 2>file
之类的操作。或者如前所述,直接致电/usr/bin/time
。
也可以不指定完整路径使用非内置:***.com/questions/29540540/…【参考方案3】:
命令时间将其输出发送到 STDERR(而不是 STDOUT)。这是因为按时间执行的命令(在本例中为 ls)通常会输出到 STDOUT。
如果你想捕捉时间的输出,那么输入:
(time ls) 2> filename
这仅捕获时间的输出,但 ls 的输出正常到控制台。如果您想在一个文件中捕获两者,请键入:
(time ls) &> filename
2> 重定向 STDERR,&> 重定向两者。
【讨论】:
这个答案实际上回答了 为什么 OP 的重定向不起作用,这是 OP 提出的问题之一。没有其他人解决这个问题。 如何通过这个管道连接到另一个进程?【参考方案4】:无需启动子外壳。使用代码块也可以。
time ls; 2> out.txt
或
time ls > /dev/null 2>&1 ; 2> out.txt
【讨论】:
同意,最佳答案。让您可以选择放弃 ls 结果并获得时间。谢谢ghostdog74 当没有任何东西可以重定向“hostent”命令的输出时,这适用于 AIX。谢谢! 请澄清2>
。我在哪里可以了解这些?
如果我同时想要 > 和 2> 怎么办?【参考方案5】:
如果您不想混合来自 time
和命令的输出。
使用 GNU 时间,您可以使用 -o file
,例如:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
tim
是时间的输出,out
和 err
是来自grep
的标准输出和标准错误。
【讨论】:
【参考方案6】:重定向似乎不适用于time
的原因是它在管道前面使用时是 bash 保留字(不是内置字!)。重击(1):
如果时间保留字在管道之前,则经过的时间以及 报告执行所消耗的用户和系统时间 管道终止。
因此,要重定向time
的输出,请使用大括号:
time ls; 2> filename
或致电/usr/bin/time
:
/usr/bin/time ls 2> filename
【讨论】:
【参考方案7】:我使用带有大括号的 stdout 和 stderr 方法的重定向进行测试。&>>rpt
代表这个 >>rpt 2>&1
但更短。
大括号将在当前 shell 中执行命令。参见:man bash
time ls a*; &>>rpt
【讨论】:
以上是关于如何重定向“时间”命令的输出?的主要内容,如果未能解决你的问题,请参考以下文章