How can I redirect the output of the “time” comman

2019-01-06 09:23发布

I tried to redirect the output of the time command, but I couldn't:

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

In the file I can see the output of the ls command, not that of time. Please explain, why I couldn't and how to do this.

6条回答
我想做一个坏孩纸
2楼-- · 2019-01-06 09:56

you can redirect the time output using,

(time ls) &> file

Because you need to take (time ls) as a single command so you can use braces.

查看更多
叛逆
3楼-- · 2019-01-06 10:01

The reason why redirection does not seem to work with time is that it's a bash reserved word (not a builtin!) when used in front of a pipeline. 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.

So, to redirect output of time, either use curly braces:

{ time ls; } 2> filename

Or call /usr/bin/time:

/usr/bin/time ls 2> filename
查看更多
等我变得足够好
4楼-- · 2019-01-06 10:02

The command time sends it's output to STDERR (instead of STDOUT). That's because the command executed with time normally (in this case ls) outputs to STDOUT.

If you want to capture the output of time, then type:

(time ls) 2> filename

That captures only the output of time, but the output of ls goes normal to the console. If you want to capture both in one file, type:

(time ls) &> filename

2> redirects STDERR, &> redirects both.

查看更多
唯我独甜
5楼-- · 2019-01-06 10:03

If you don't want to mix output from time and the command. With GNU time, you can use -o file like:

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

while tim is output of time, out and err are stdout and stderr from grep.

查看更多
Animai°情兽
6楼-- · 2019-01-06 10:09

time is shell builtin and I'm not sure if there is way to redirect it. However you can use /usr/bin/time instead, which definitely accept any output redirections.

查看更多
仙女界的扛把子
7楼-- · 2019-01-06 10:10

no need to launch sub shell. Use a code block will do as well.

{ time ls; } 2> out.txt

or

{ time ls > /dev/null 2>&1 ; } 2> out.txt
查看更多
登录 后发表回答