为什么 `echo` 命令不能使用 `time`?

3

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

看起来我正在使用GNU版本的echo,而不是预装在Mac OS X上的假定的BSD版本/bin/echo

zsh提供了更加特殊的功能:

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

这两个都不是普通的可执行文件。非常有趣!


2
你似乎在使用 zsh,而不是 bash - webb
我无法重现你的问题。在我的macOS Sierra Bash 3和OEL 6.7 Bash 4上,它按预期工作。 - alvits
1
如果你正在使用zsh,请使用外部的/usr/bin/time命令。 - alvits
1
@alvits:不是的,但原始问题包括一个管道,因此OP可能认为外部的“time”可能是内置“time”的等效替代品。 - Roland Illig
@RolandIllig:感谢您澄清这一点。是的,我没有意识到zsh提供了一个与通常的/usr/bin/time可执行文件质上不同的内置功能。 - Birchlabs
显示剩余4条评论
1个回答

3

当您使用内置的time(用于测量完整管线)与其他内置命令结合使用时,似乎会出现这种情况,例如echotrue等。

有趣的是,在zshall手册中没有找到任何提及此问题的内容。

为解决此问题,请运行以下命令:

time command echo 
< p> command precommand modifier会调用外部echo而不是内置的echo。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接