如何在 zsh 中的函数上运行“time”

如何在 zsh 中的函数上运行“time”

这有效:

time ls -l

这不起作用

f() { ls -l }
time f

第二种情况没有打印时间输出。为什么?

答案1

@John1024 给了你答案bash。我试着回答zsh标签...

如果你为你的函数生成一个子 shell,你就会得到时间统计信息:

% zsh
% f() { sleep 1 }
% time f
% time (f)
( f; )  0.00s user 0.05s system 4% cpu 1.061 total
% time sleep 1
sleep 1  0.00s user 0.03s system 2% cpu 1.045 total

这会增加一点开销,但正如您从这个(非伪造的;))例子中看到的那样,它可能微不足道。

答案2

您已将其标记为bashzsh。此答案适用于bash

这是错误bash

f() { ls -l }

有效的方法是:

f() { ls -l ; }

有了 的新定义ftime命令就可以起作用。

在 下bash,当用括号将命令组合在一起时,最后一个命令后面必须跟一个分号或换行符。这在 中的“复合命令”下有说明man bash

(我会在下面测试这个解决方案zsh,但我目前还没有安装它。但是,根据这篇文章,下面的解决方案zsh可能是f在子shell中运行。更新:请参阅@mpy 的回答zsh

相关内容