15

I've just switched to zsh. However, I really don't like how the time builtin command also outputs the command that it's timing. I much prefer the bash style output. Anyone know how to switch it over?

Zsh:

[casqa1:~/temp]$ time grep foo /dev/null
/usr/local/gnu/bin/grep --color -i foo /dev/null  0.00s user 0.00s system 53% cpu 0.004 total

Bash:

[casqa1:~/temp]$ bash
casqa1.nyc:~/temp> time grep foo /dev/null

real        0.0
user        0.0
sys         0.0

Thanks,

/YGA

23

This is fairly close:

$ TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S'

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s
  • 2
    My proposed edit was rejected 2-1. Ideally, the format should be TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. The *s in the flags formats them as hours/minutes as per bash, instead of just seconds. More information on TIMEFMT here. – Sparhawk May 16 '16 at 7:49
7

Another option is to disable the builtin command and use the time binary provided by your operating system. I have the following in my .zshrc:

disable -r time       # disable shell reserved word
alias time='time -p ' # -p for POSIX output

This way time outputs to STDERR.

3

Just a small precision regarding Dennis Williamson's very useful answer (the "fairly close" part): bash's built-in time outputs to stderr, while zsh's outputs to stdout.

This command can illustrate the difference: time (echo abc) 2>/dev/null

In bash, it outputs:

    $ time (echo abc) 2>/dev/null
    abc

In zsh, with the suggested TIMEFMT variable:

    $ time (echo abc) 2>/dev/null
    abc

    real    0.00s
    user    0.00s
    sys     0.00s

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.