Ändern Sie das Ausgabeformat der zsh-Zeit


19

Ich bin gerade umgestiegen zsh. Mir gefällt jedoch nicht wirklich, wie der timeeingebaute Befehl auch den Befehl ausgibt, dass es Timing ist. Ich bevorzuge die bashStyle-Ausgabe. Weiß jemand, wie man es umschaltet?

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

Vielen Dank,

/ YGA

Antworten:


29

Das ist ziemlich nah:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s

5
Meine vorgeschlagene Änderung wurde 2-1 abgelehnt. Idealerweise sollte das Format sein TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. Das *s in den Flags formatiert sie als Stunden / Minuten pro Bash, anstatt nur als Sekunden. Mehr Infos dazu TIMEFMT hier .
Sparhawk

8

Eine andere Möglichkeit besteht darin, den eingebauten Befehl zu deaktivieren und die von Ihrem Betriebssystem bereitgestellte Zeitbinärdatei zu verwenden. Ich habe folgendes in meinem .zshrc:

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

Auf diese Weise wird die Zeit an STDERR ausgegeben.


4

Nur eine kleine Genauigkeit in Bezug auf Dennis Williamsons sehr nützliche Antwort (der "ziemlich enge" Teil): bashs eingebaute timeAusgänge an stderr, während zshs Ausgänge an stdout.

Dieser Befehl kann den Unterschied veranschaulichen: time (echo abc) 2>/dev/null

In der Bash gibt es aus:

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

In zsh mit der vorgeschlagenen TIMEFMT-Variablen:

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

    real    0.00s
    user    0.00s
    sys     0.00s
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.