为什么 `time` 对 `echo` 不起作用?
Why does `time` not work on `echo`?
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
使用普通可执行文件执行 time
和 echo
.
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
。 =29=]
而 zsh
提供了更特别的东西:
➜ ~ which echo
echo: shell built-in command
➜ ~ which time
time: shell reserved word
这些都不是普通的可执行文件。很有意思!
当您将内置 time
(测量完整管道)与另一个内置命令(如 echo
、true
)结合使用时,似乎会发生这种情况。
奇怪的是,我在 zshall
手册页中找不到任何提及。
要解决这个问题,运行 这个:
time command echo
command
预命令修饰符调用外部回显而不是内置回显。
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
使用普通可执行文件执行 time
和 echo
.
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
。 =29=]
而 zsh
提供了更特别的东西:
➜ ~ which echo
echo: shell built-in command
➜ ~ which time
time: shell reserved word
这些都不是普通的可执行文件。很有意思!
当您将内置 time
(测量完整管道)与另一个内置命令(如 echo
、true
)结合使用时,似乎会发生这种情况。
奇怪的是,我在 zshall
手册页中找不到任何提及。
要解决这个问题,运行 这个:
time command echo
command
预命令修饰符调用外部回显而不是内置回显。