Grep time command output

后端 未结 5 1077
长情又很酷
长情又很酷 2021-02-02 06:38

Using time ls, I have the following output:

$ time ls -l 
total 2
-rwx------+ 1 FRIENDS None 97 Jun 23 08:59 location.txt
-rw-r--r--+ 1 FRIENDS None         


        
相关标签:
5条回答
  • 2021-02-02 07:19

    time writes its output to stderr, so you need to pipe stderr instead of stdout. But it's also important to remember that time is part of the syntax of bash, and it times an entire pipeline. Consequently, you need to wrap the pipeline in braces, or run it in a subshell:

     $ { time ls -l >/dev/null; } 2>&1 | grep real
     real   0m0.005s
    

    With Bash v4.0 (probably universal on Linux distributions but still not standard on Mac OS X), you can use |& to pipe both stdout and stderr:

    { time ls -l >/dev/null; } |& grep real
    

    Alternatively, you can use the time utility, which allows control of the output format. On my system, that utility is found in /usr/bin/time:

    /usr/bin/time -f%e ls -l >/dev/null 
    

    man time for more details on the time utility.

    0 讨论(0)
  • 2021-02-02 07:32

    Look out.. bash has a built-in "time" command. Here are some of the differences..

    # GNU time command (can also use $TIMEFORMAT variable instead of -f)
    bash> /usr/bin/time -f%e ls >/dev/null
    0.00
    
    
    # BASH built-in time command (can also use $TIME variable instead of -f)
    bash> time -f%e ls >/dev/null
    -f%e: command not found
    
    real    0m0.005s
    user    0m0.004s
    sys     0m0.000s
    
    0 讨论(0)
  • 2021-02-02 07:36

    I think, it can be made a little easier:

    time ls &> /dev/null | grep real
    
    0 讨论(0)
  • 2021-02-02 07:38
    (time ls -l)  2>&1 > /dev/null |grep real
    

    This redirects stderr (which is where time sends its output) to the same stream as stdout, then redirects stdout to dev/null so the output of ls is not captured, then pipes what is now the output of time into the stdin of grep.

    0 讨论(0)
  • 2021-02-02 07:42

    If you just want to specify the output format of time builtin, you can modify the value of TIMEFORMAT environment variable instead of filtering it with grep.

    In you case,

    TIMEFORMAT=%R
    time ls -l
    

    would give you the "real" time only.

    Here's the link to relevant information in Bash manual (under "TIMEFORMAT").

    This is a similar question on SO about parsing the output of time.

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