How can I redirect the output of the “time” command?
我试图重定向时间命令的输出,但无法:
1 2 3 4
| $time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s |
在文件中,我可以看到ls命令的输出,而不是time命令的输出。请解释一下,为什么我做不到,以及怎么做。
- 我想应该是超级用户。
- 我不这么认为!
- 这个问题的答案不仅是程序员感兴趣的,也是其他超级用户感兴趣的:superuser.com
- 在Linux中是否有将时间输出重定向到文件的方法?
无需启动子shell。使用代码块也可以。
或
1
| { time ls > /dev/null 2>&1 ; } 2> out.txt |
- 1,最佳答案
- 同意,最佳答案。让你选择放弃LS的结果,只是得到时间。谢谢你鬼狗74
- 当没有任何东西可以重定向"hostent"命令的输出时,这对AIX有效。谢谢您!
- 请澄清有关2>的问题。我在哪里可以了解这些?
- 如果我同时想要>和2>怎么做?
您可以使用重定向时间输出,
因为您需要将(time ls)作为单个命令,以便可以使用大括号。
- 是的,很好,但问题是他们是怎么做到的?
- time命令将把参数作为命令。但括号将其分组为一个命令。例如:time ls>file1.txt在arguments中,0=time 1="ls>file1.txt"
- 时间命令在stderr中打印输出。所以您可以使用(time ls)2>文件
- 关于EDOCX1[0]的澄清,我在哪里可以了解这些?
- @你好,安迪·埃多克斯(Andy EDOCX1)(1)与埃多克斯(EDOCX1)(2)相似。它同时指导stdout和stderr。
- @你好,安迪:这个页面有一些关于bash中I/O重定向的重要信息。它应该有助于您理解&>以及其他语法。
命令时间将其输出发送到stderr(而不是stdout)。这是因为以时间执行的命令通常(在本例中是ls)输出到stdout。
如果要捕获时间输出,请键入:
它只捕获时间的输出,但是ls的输出在控制台上是正常的。如果要在一个文件中同时捕获这两个文件,请键入:
2>重定向stderr,&;>同时重定向两者。
- 这个答案实际上回答了为什么OP的重定向不起作用,这是OP提出的问题之一。没有其他人能解决这个问题。
时间是shell内置的,我不确定是否有方法重定向它。但是你可以用相反,它肯定接受任何输出重定向。
- /usr/bin/time--输出文件名ls
- 内置时间对于输出重定向很好地工作。它只在stderr上输出,而不在stdout上输出。
- 问题是,内置命令是在shell环境本身而不是子shell中执行的。由于shell的stderr通常连接到终端,因此重定向不会做任何事情。为了改变内置时间的方向,我相信您必须做一些类似于bash time mycmd 2>file的事情。或者如前所述打电话给/usr/bin/time。
- 您也可以在不指定完整路径的情况下使用非内置的:stackoverflow.com/questions/29540540/…
如果不想混合来自time和命令的输出。有了GNU时间,您可以使用-o file,比如:
1
| /usr/bin/time -o tim grep -e k /tmp 1>out 2>err |
当tim是时间的输出时,out和err是grep的stdout和stderr。
重定向似乎不适用于time的原因是它是一个bash保留字(不是内置的!)在管道前面使用时。BASH(1):
If the time reserved word precedes a pipeline, the elapsed as well as
user and system time consumed by its execution are reported when the
pipeline terminates.
因此,要重定向time的输出,可以使用大括号:
1
| { time ls; } 2> filename |
或致电/usr/bin/time:
1
| /usr/bin/time ls 2> filename |