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

jus*_*don 7 bash zsh time

这有效:

time ls -l
Run Code Online (Sandbox Code Playgroud)

这不起作用

f() { ls -l }
time f
Run Code Online (Sandbox Code Playgroud)

在第二种情况下不打印时间输出。为什么?

mpy*_*mpy 6

@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
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*024 5

您已经用bash和标记了它zsh。此答案适用于bash.

这是一个错误bash

f() { ls -l }
Run Code Online (Sandbox Code Playgroud)

相反有效的是:

f() { ls -l ; }
Run Code Online (Sandbox Code Playgroud)

有了 的新定义f,该time命令就可以工作了。

在 下bash,当将命令分组在大括号中时,最后一个命令后面必须跟有分号或换行符。这记录在man bash.

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

  • 即使使用分号,您也不会在“zsh”中获得时间报告。 (2认同)