Changer le format de sortie de l'heure de zsh

19

Je viens de passer à zsh. Cependant, je n'aime vraiment pas la façon dont la timecommande intégrée génère également la commande de synchronisation. Je préfère de loin la bashsortie style. Quelqu'un sait comment le changer?

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

Frapper:

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

real        0.0
user        0.0
sys         0.0

Merci,

/ YGA

YGA
la source

Réponses:

29

C'est assez proche:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s
En pause jusqu'à nouvel ordre.
la source
5
Ma modification proposée a été rejetée 2-1. Idéalement, le format devrait être TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. Les *s dans les drapeaux les formatent en heures / minutes selon bash, au lieu de quelques secondes. Plus d'informations TIMEFMT ici .
Sparhawk
8

Une autre option consiste à désactiver la commande intégrée et à utiliser le temps binaire fourni par votre système d'exploitation. J'ai les éléments suivants dans mon .zshrc:

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

De cette façon, le temps est envoyé à STDERR.

exic
la source
4

Juste une petite précision concernant la réponse très utile de Dennis Williamson (la partie "assez proche"): les timesorties intégrées de bash vers stderr, tandis que les sorties de zsh vers stdout.

Cette commande peut illustrer la différence: time (echo abc) 2>/dev/null

En bash, il génère:

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

En zsh, avec la variable TIMEFMT suggérée:

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

    real    0.00s
    user    0.00s
    sys     0.00s
anol
la source