Cambia il formato di output dell'ora di zsh


19

Sono appena passato a zsh. Tuttavia, in realtà non mi piace come il timecomando incorporato emetta anche il comando che è temporizzato. Preferisco di gran lunga l' bashoutput di stile. Qualcuno sa come 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

bash:

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

real        0.0
user        0.0
sys         0.0

Grazie,

/ YGA

Risposte:


29

Questo è abbastanza vicino:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s

5
La mia modifica proposta è stata respinta 2-1. Idealmente, il formato dovrebbe essere TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. Le *s nelle bandiere le formattano come ore / minuti come da bash, anziché solo secondi. Maggiori informazioni TIMEFMT qui .
Sparhawk,

8

Un'altra opzione è disabilitare il comando incorporato e utilizzare il binario temporale fornito dal sistema operativo. Ho il seguente nel mio .zshrc:

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

In questo modo il tempo viene emesso su STDERR.


4

Solo una piccola precisione per quanto riguarda la risposta molto utile di Dennis Williamson (la parte "abbastanza vicina"): gli timeoutput integrati di bash a stderr, mentre gli output di zsh a stdout.

Questo comando può illustrare la differenza: time (echo abc) 2>/dev/null

In bash, produce:

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

In zsh, con la variabile TIMEFMT suggerita:

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

    real    0.00s
    user    0.00s
    sys     0.00s
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.