我正在使用 Mac,并且正在尝试计算命令执行的时间。
如果我做
time echo
它没有任何输出
但如果我这样做
time ls
它确实给了我时间函数的输出
知道为什么会发生这种情况吗?
更新:事实证明这是因为我正在使用 zsh,并且oh-my-zsh
已安装。在 bash 中运行良好,但在 zsh 中没有输出。知道为什么吗?
答案1
在 zsh 中,time
关键字对内置函数(或其他类似的 shell 内部构造)没有影响。从这个邮件列表帖子:
附加说明:应用于当前 shell 中执行的任何构造的内置时间将被静默忽略。因此,虽然在语法上可以在 time 关键字之后立即放置一个开头花句或重复循环等,但您将无法获得计时统计信息。您必须使用括号来强制执行子 shell,然后对其进行计时。
$ time echo
$ time (echo)
( echo; ) 0.00s user 0.00s system 51% cpu 0.001 total
答案2
time 命令将产生命令 echo。在 zsh 下,这是内置于 shell 中的,因此不会运行外部二进制文件。在 bash 下,echo 将运行位于 /bin/echo 中的 echo 二进制文件。
总之,zsh 内置了 echo,bash 将从 echo 二进制文件中生成一个进程。