Ubah format output waktu zsh

19

Saya baru saja beralih ke zsh. Namun, saya benar-benar tidak suka bagaimana timeperintah builtin juga menampilkan perintah yang waktunya. Saya lebih suka bashkeluaran gaya. Adakah yang tahu bagaimana cara mengubahnya?

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

Pesta:

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

real        0.0
user        0.0
sys         0.0

Terima kasih,

/ YGA

YGA
sumber

Jawaban:

29

Ini cukup dekat:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s
Dijeda sampai pemberitahuan lebih lanjut.
sumber
5
Hasil edit yang saya ajukan ditolak 2-1. Idealnya, formatnya harus TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'. The *s dalam format bendera mereka sebagai jam / menit per bash, bukan hanya detik. Informasi lebih lanjut di TIMEFMT sini .
Sparhawk
8

Pilihan lain adalah untuk menonaktifkan perintah builtin dan menggunakan biner waktu yang disediakan oleh sistem operasi Anda. Saya memiliki yang berikut ini di .zshrc:

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

Dengan cara ini, waktu ditampilkan ke STDERR.

exic
sumber
4

Hanya sedikit presisi mengenai jawaban yang sangat berguna dari Dennis Williamson (bagian "cukup dekat"): timekeluaran stderrbawaan bash untuk , sedangkan keluaran zsh ke stdout.

Perintah ini dapat menggambarkan perbedaan: time (echo abc) 2>/dev/null

Dalam bash, ini menghasilkan:

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

Di zsh, dengan variabel TIMEFMT yang disarankan:

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

    real    0.00s
    user    0.00s
    sys     0.00s
anol
sumber