为什么`time`不能用于'echo`?

时间:2016-11-09 22:42:25

标签: time echo zsh

time似乎通常在我的系统上运行:

➜  ~ time touch tmp.txt
touch tmp.txt  0.00s user 0.00s system 54% cpu 0.007 total

当我尝试time echo时,它的输出似乎被抑制了。

➜  ~ time echo 

为了加强情节:它似乎恢复了衡量echo的能力,只要我将echo扔进管道:

➜  ~ time echo  | xxd     
00000000: f09f 8d94 0a                             .....
echo   0.00s user 0.00s system 38% cpu 0.002 total
xxd  0.00s user 0.00s system 88% cpu 0.003 total

发生了什么事? echo输出到time最喜欢的流,替换其报告吗?

奖励积分:是否有某种方式(例如流重定向)使time echo 输出通常的报告?

编辑:有些评论者指出我正在使用zsh。我当时没有注意到,但这解释了很多。

bash使用普通可执行文件执行timeecho

bash-3.2$ which echo
/usr/local/opt/coreutils/libexec/gnubin/echo
bash-3.2$ which time
/usr/bin/time

(看起来我使用的是echo的GNU版本,而不是Mac OS X附带的推荐的BSD版本/bin/echo。“

zsh提供了一些非常特别的东西:

➜  ~ which echo
echo: shell built-in command
➜  ~ which time
time: shell reserved word

这些都不是正常的可执行文件。非常有趣!

1 个答案:

答案 0 :(得分:3)

当您使用内置time(测量完整管道)与另一个内置命令(如echotrue)时,似乎会发生这种情况。

奇怪的是,我在zshall手册页中找不到任何提及。

要解决此问题,请运行:

time command echo 

command 预命令修饰符调用外部回声而不是内置回声。