Zmień format wyjściowy czasu zsh

19

Właśnie się zmieniłem zsh. Jednak naprawdę nie podoba mi się, w jaki sposób timewbudowane polecenie generuje również polecenie określające czas. Wolę bashstyl wyjściowy. Czy ktoś wie jak to przełączyć?

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

Grzmotnąć:

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

real        0.0
user        0.0
sys         0.0

Dzięki,

/ YGA

YGA
źródło

Odpowiedzi:

29

Jest to dość blisko:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s
Wstrzymano do odwołania.
źródło
5
Moja proponowana edycja została odrzucona 2-1. Najlepiej byłoby, gdyby format był TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. W *ów w formatach nich znaczników jako godziny / minuty, jak na bash, zamiast kilku sekund. Więcej informacji TIMEFMT tutaj .
Sparhawk
8

Inną opcją jest wyłączenie wbudowanego polecenia i użycie pliku binarnego czasu dostarczonego przez system operacyjny. Mam w swoim .zshrc:

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

W ten sposób czas jest wysyłany do STDERR.

exic
źródło
4

Tylko mała precyzja odnośnie bardzo przydatnej odpowiedzi Dennisa Williamsona (część „dość blisko”): wbudowane timewyjścia bash do stderr, a wyjścia zsh do stdout.

To polecenie może zilustrować różnicę: time (echo abc) 2>/dev/null

W bash generuje:

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

W zsh, z sugerowaną zmienną TIMEFMT:

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

    real    0.00s
    user    0.00s
    sys     0.00s
anol
źródło