如何重定向“time”命令的输出?

8 浏览
0 Comments

如何重定向“time”命令的输出?

我尝试重定向time命令的输出,但失败了:

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

在文件中,我可以看到ls命令的输出,而不是time命令的输出。

请解释为什么我无法实现重定向,并说明如何操作。

0
0 Comments

如何重定向“time”命令的输出?

你可以使用以下方法重定向time命令的输出:

(time ls) &> file

这是因为你需要将(time ls)视为一个单独的命令,所以可以使用大括号来分组。

但是问题是他们是如何做到的呢?

time命令将参数作为一个命令。但是括号将其作为一个命令组合在一起。例如:time ls > file1.txt。在参数中,0 = time,1 = "ls > file1.txt"。

而time命令将输出打印在stderr中。因此,你可以使用(time ls) 2> file。

关于 &>file 的解释,请问我可以在哪里学习这些内容呢?

_there_andy &>file 相当于 >file 2>&1,它可以同时重定向stdout和stderr。

_there_andy:这个页面提供了关于BASH中I/O重定向的一些很好的信息。它将帮助你理解&>file以及其他语法。

0
0 Comments

在这个问题中,提问者想知道如何重定向"time"命令的输出。他们提到了两种方法来实现这个目标。首先是使用代码块的方式:{ time ls; } 2> out.txt,其次是使用重定向符号:{ time ls > /dev/null 2>&1 ; } 2> out.txt。这些方法都被其他人确认有效,并且被称为最佳答案。其中一位回答者还表示,在AIX系统中,这个方法可以用来重定向"hostent"命令的输出。还有一个人提到想了解2>的含义,以及如何同时使用" > "和"2 > "。另外,还有人问为什么在这里需要使用子shell或代码块。最后,有人指出可以使用{ time ls; } >out.txt 2>&1来同时捕获标准输出和标准错误输出。他们猜测"time"命令可能是一个内置命令,在同一行上的重定向符号不会对它的标准错误输出产生影响。

根据这些讨论,我们可以得出结论,要重定向"time"命令的输出,可以使用代码块或重定向符号的方法。代码块的语法是{ time command; } 2> file,重定向符号的语法是{ time command > /dev/null 2>&1 ; } 2> file。这些方法在不同的操作系统中都被证实有效。而2>是用来指定标准错误输出的重定向符号,可以通过查询相关文档来了解更多信息。如果想同时使用" > "和"2 > ",可以使用{ time command; } > file 2>&1的写法。至于为什么需要使用子shell或代码块,以及"time"命令的内部工作原理,这些问题的答案没有在讨论中给出。

0
0 Comments

问题:如何将"time"命令的输出重定向?

原因:time命令的输出默认发送到标准错误流(STDERR),而不是标准输出流(STDOUT)。这是因为使用time命令执行的命令通常(在本例中为ls命令)将输出发送到STDOUT。

解决方法:如果想捕获time命令的输出,请输入以下命令:

(time ls) 2> filename

这只捕获time命令的输出,而ls命令的输出会正常显示在控制台上。如果想将两者都捕获到同一个文件中,请输入以下命令:

(time ls) &> filename

其中2>重定向了标准错误流,&>同时重定向了标准输出和标准错误。

这个答案实际上解答了提问者的重定向不起作用的原因,这也是提问者所问的问题之一。其他回答没有涉及到这一点。

如何将输出通过管道传递给另一个进程呢?

0