跟踪并计时 shell 初始化的每一步

Ame*_*ina 3 zsh profiling

以下命令为我提供了完整的步骤跟踪

zsh -i -c -x exit > trace 2>&1
Run Code Online (Sandbox Code Playgroud)

我希望它能够在每个精确步骤旁边(例如作为第一列)捕获该步骤花费的时间。

Zsh 是否提供了一种简单的方法来做到这一点?

Gil*_*il' 5

您可以轻松获得接近的内容(使用相当新的版本):每个步骤的时间戳。来自以下文档-x

\n\n
\n

输出前面是 $PS4 的值,其格式如提示扩展中所述。

\n
\n\n

您可以在跟踪前缀中添加时间戳。%.使用 zsh \xe2\x89\xa55.6 为您提供纳秒精度,仅微秒精度在 5.0.6 和 5.5.x 之间。我认为在早期版本中,没有%D,您只能获得第二精度。

\n\n
PS4=\'+%D{%s.%9.}:%N:%i>\' zsh -x \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后,您可以对跟踪进行后处理以计算连续时间戳之间的差异。

\n\n
<trace awk -F: \'{printf "+%.09f", $1 - t; t=$1; $1=""; print}\'\n
Run Code Online (Sandbox Code Playgroud)\n