Змініть вихідний формат часу 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.