How can I redirect the output of the “time” command?

前端 未结 7 1523
甜味超标
甜味超标 2020-11-30 19:19

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
相关标签:
7条回答
  • 2020-11-30 19:21

    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.

    0 讨论(0)
  • 2020-11-30 19:22

    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
    
    0 讨论(0)
  • 2020-11-30 19:26

    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.

    0 讨论(0)
  • 2020-11-30 19:31

    I use the redirection of stdout and stderr method with braces for testing.
    The &>>rpt represents this >>rpt 2>&1 but shorter.
    The braces will execute a command(s) in the current shell.   See: man bash

    { time ls a*; } &>>rpt
    
    0 讨论(0)
  • 2020-11-30 19:39

    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
    
    0 讨论(0)
  • 2020-11-30 19:43

    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.

    0 讨论(0)
提交回复
热议问题