改变zsh的时间输出格式

YGA*_*YGA 26 zsh time

我刚刚切换到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
Run Code Online (Sandbox Code Playgroud)

重击:

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

real        0.0
user        0.0
sys         0.0
Run Code Online (Sandbox Code Playgroud)

谢谢,

/YGA

Den*_*son 35

这是相当接近的:

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

$ time sleep 1

real    1.01s
user    0.00s
sys     0.00s
Run Code Online (Sandbox Code Playgroud)

  • 我提议的编辑被 2-1 拒绝了。理想情况下,格式应该是`TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S'`。标志中的 `*` 将它们格式化为每个 bash 的小时/分钟,而不仅仅是秒。更多关于`TIMEFMT`的信息[这里](http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-TIMEFMT)。 (8认同)

exi*_*xic 9

另一种选择是禁用内置命令并使用操作系统提供的时间二进制文件。我有以下内容.zshrc

disable -r time       # disable shell reserved word
alias time='time -p ' # -p for POSIX output
Run Code Online (Sandbox Code Playgroud)

这样时间输出到 STDERR。


ano*_*nol 5

关于丹尼斯威廉姆森非常有用的答案(“相当接近”的部分)的一个小精度:b​​ash 的内置time输出到stderr,而 zsh 的输出到stdout.

这个命令可以说明区别: time (echo abc) 2>/dev/null

在 bash 中,它输出:

    $ time (echo abc) 2>/dev/null
    abc
Run Code Online (Sandbox Code Playgroud)

在 zsh 中,使用建议的 TIMEFMT 变量:

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

    real    0.00s
    user    0.00s
    sys     0.00s
Run Code Online (Sandbox Code Playgroud)