如何报告所有 bash 命令的时间和其他信息?

Ohm*_*ect 5 bash time bashrc

我在终端中运行的大多数事情都需要很长时间来计算,我希望 bash 在输入终端的每个命令结束时输出一个时间报告。有什么我可以放入我的 bashrc 来做到这一点的吗?

例子:

$ find / -ls
<find / -ls return info>
start time = 10:21:54 | end time = 10:31:34 | time lapsed = 00:10:20
$
Run Code Online (Sandbox Code Playgroud)

或者

$ make all
<make all return info>
start time = 10:21:54 | end time = 10:31:34 | time lapsed = 00:10:20
Run Code Online (Sandbox Code Playgroud)

能够为像 cd 这样的命令添加一个例外列表会很好,但它不会真正打扰我。

Jos*_* R. 3

我在我的中尝试了以下操作.bashrc

echo -ne "$PS1"
while IFS= read -er line;do
    eval "time $line"
    echo -ne "$PS1"
done
Run Code Online (Sandbox Code Playgroud)

这大致可以满足您的要求,但有几个注意事项:

  • 您的提示符实际上已被破坏(shell 通常会\W在回显提示符之前解释提示符中的类似序列)。
  • 您将失去命令行编辑功能(例如,您不能使用+ CTRL)。Lclear
  • 可能还有其他几个。

我想一个好的折衷方案是通过 shell 函数有选择地启用此功能:

timed_commands() {
    [ "$1" = off ] && exec bash
    PS1='$ '  # Put something simple here
    while IFS= read -erp "$PS1" line;do
        eval "time $line"
    done
}
Run Code Online (Sandbox Code Playgroud)

打开它timed_commands并使用关闭它timed_commands off

感谢 @jthill 的评论,切换-eread.