zsh `time` 不适用于 `source`

Tom*_*ale 5 zsh

我可以用来time获取运行时间统计信息:

% time zsh --version
zsh 5.6.2 (x86_64-pc-linux-gnu)
zsh --version  0.00s user 0.00s system 86% cpu 0.005 total
Run Code Online (Sandbox Code Playgroud)

如何计算源脚本的运行时间?

% time source $NVM_DIR/nvm.sh
%
Run Code Online (Sandbox Code Playgroud)

sch*_*ily 1

似乎zsh不支持时间内置命令。

尝试使用支持 for 作为time保留字(这适用于zsh并且还支持 time 内置命令(这不适用于zsh)的 shell。

顺便说一句:这适用于ksh88ksh93bosh(当前的 Bourne Shell)mkshbash

顺便说一句:正确的计时方法是获取 shell 及其所有子过程(可能称为程序)的计时,并打印命令之前和之后的差异。如果计时包括在 shell 本身中花费的时间,则可以对内置命令进行计时。

背景是 shell 内部的工作时间应该与外部time命令的工作时间兼容,并且外部time命令打印为特定命令创建的所有进程的所有时间的总和。如果time不包括子进程的值,它会为命令打印太低的值,cc因为大部分工作是在 的子进程内完成的cc

  • 它只能对进程进行计时。所以 `time (source ...)` 或 `time (echo x)` 就可以了。其他 shell 在对内置函数或函数进行计时时最终可能会包括其他进程的时间。例如,如果您在“seq”返回后按 Enter 键,请参阅“bosh -c 'seq 10000000 > /dev/null & time read”,其中包括“seq”的用户/系统时间。IIRC mksh 在这方面有一些改进。 (4认同)