【问题标题】:Does ZSH's time command take any arguments like -p?ZSH 的时间命令有没有像 -p 这样的参数?
【发布时间】:2019-06-15 00:05:22
【问题描述】:

我最近安装了 macOS 10.15 Catalina 的开发者测试版,默认使用 ZSH 而不是 BASH。

我在/usr/bin/time 中安装了time 作为二进制文件,并用它来计时我的一些脚本。然而,ZSH 将其作为内置命令。 我的问题是我通常使用time -p 以我喜欢的方式格式化其输出,但这在 ZSH 上似乎是不可能的。

根据man time

     -p      The output is formatted as specified by IEEE Std 1003.2-1992 (``POSIX.2'').

这似乎不适用于ZSH的内置,并且ZSH似乎没有使用我安装的time二进制:

重击

bash-5.0$ which time
/usr/bin/time
bash-5.0$ time echo hello; echo $?
hello

real    0m0.000s
user    0m0.000s
sys 0m0.000s
0
bash-5.0$ time -p echo hello; echo $?
hello
real 0.00
user 0.00
sys 0.00
0

ZSH

is-mbp-bleggiero% which time
time: shell reserved word
is-mbp-bleggiero% time echo hello; echo $?
hello
0
is-mbp-bleggiero% time -p echo hello; echo $?
zsh: command not found: -p
-p echo hello  0.00s user 0.00s system 74% cpu 0.001 total
127

我觉得这很奇怪;它似乎包括我想要的信息(用户与系统和总数,格式为秒),但它也没有运行命令,而是抱怨它不存在。

【问题讨论】:

    标签: performance zsh timing


    【解决方案1】:

    如果你想使用这个选项,你可以打电话给/usr/bin/time -p,或者=time -p

    zsh 内置时间不带任何选项 (man zshmisc)。

    但您可以使用您想要的格式 export TIMEFMT,包括带有 \n 的换行符。

    echo $TIMEFMT 看看现在是什么

    【讨论】:

    • 所以这是一个子问题。 echo $TIMEFMT 打印 %J %U user %S system %P cpu %*E total,但 time echo hello 只打印 hello,没有任何计时。那里发生了什么?
    • 我猜你必须调用外部程序,而不是 shell 函数或内置程序(echo 是内置程序)。
    • 我明白了; time man man 确实打印了正确的时间。不过,它没有打开手册页,所以我想我会一直使用 =time 因为这个 ZSH time 内置函数似乎永远不会像我需要的那样运行
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2022-12-24
    相关资源
    最近更新 更多