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

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

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.