Cambiar el formato de salida del tiempo de zsh

19

Acabo de cambiar a zsh. Sin embargo, realmente no me gusta cómo el timecomando incorporado también genera el comando que está cronometrando. Prefiero el bashestilo de salida. ¿Alguien sabe cómo cambiarlo?

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

Golpetazo:

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

real        0.0
user        0.0
sys         0.0

Gracias,

/ YGA

YGA
fuente

Respuestas:

29

Esto está bastante cerca:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s
Pausado hasta nuevo aviso.
fuente
55
Mi edición propuesta fue rechazada 2-1. Idealmente, el formato debería ser TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. La *s en las banderas los formatea como horas / minutos según bash, en lugar de solo segundos. Más información TIMEFMT aquí .
Sparhawk
8

Otra opción es deshabilitar el comando incorporado y usar el tiempo binario proporcionado por su sistema operativo. Tengo lo siguiente en mi .zshrc:

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

De esta manera, el tiempo sale a STDERR.

exic
fuente
4

Solo una pequeña precisión con respecto a la respuesta muy útil de Dennis Williamson (la parte "bastante cercana"): timesalidas integradas de bash a stderr, mientras que las salidas de zsh a stdout.

Este comando puede ilustrar la diferencia: time (echo abc) 2>/dev/null

En bash, genera:

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

En zsh, con la variable TIMEFMT sugerida:

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

    real    0.00s
    user    0.00s
    sys     0.00s
anol
fuente