Изменить формат вывода времени Zsh


19

Я только что перешел на zsh. Однако мне действительно не нравится, как timeвстроенная команда также выводит команду, для которой она предназначена. Я предпочитаю bashстиль вывода. Кто-нибудь знает, как это переключить?

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

Благодарность,

/ YGA

Ответы:


29

Это довольно близко:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s

5
Мое предлагаемое редактирование было отклонено 2-1. В идеале формат должен быть TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. В *s в форматах флагах них как часы / минуты , как на баш, а не считанные секунды. Больше информации TIMEFMT здесь .
Sparhawk

8

Другой вариант - отключить встроенную команду и использовать двоичный файл времени, предоставляемый вашей операционной системой. У меня есть следующее в моем .zshrc:

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

Таким образом, время выводится в STDERR.


4

Просто небольшая точность относительно очень полезного ответа Денниса Уильямсона («довольно близкая» часть): встроенные timeвыходные данные bash к stderr, а выходные zsh к stdout.

Эта команда может показать разницу: time (echo abc) 2>/dev/null

В bash выводит:

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

В zsh с предложенной переменной TIMEFMT:

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

    real    0.00s
    user    0.00s
    sys     0.00s
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.