![如何在 zsh 中的函数上运行“time”](https://linux22.com/image/1389560/%E5%A6%82%E4%BD%95%E5%9C%A8%20zsh%20%E4%B8%AD%E7%9A%84%E5%87%BD%E6%95%B0%E4%B8%8A%E8%BF%90%E8%A1%8C%E2%80%9Ctime%E2%80%9D.png)
这有效:
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
您已将其标记为bash
和zsh
。此答案适用于bash
。
这是错误bash
:
f() { ls -l }
有效的方法是:
f() { ls -l ; }
有了 的新定义f
,time
命令就可以起作用。
在 下bash
,当用括号将命令组合在一起时,最后一个命令后面必须跟一个分号或换行符。这在 中的“复合命令”下有说明man bash
。
(我会在下面测试这个解决方案zsh
,但我目前还没有安装它。但是,根据这篇文章,下面的解决方案zsh
可能是f
在子shell中运行。更新:请参阅@mpy 的回答zsh
。)