显示自我在提示中启动最后一个命令以来经过的时间

klu*_*utt 2 bash prompt

有没有办法显示自我启动最后一个命令以来经过的时间?我发现这个:PS1 提示显示经过的时间,但这将显示自上一个命令完成到新命令完成为止经过的时间。

我的想法是以某种方式强制在我输入的每个命令time之前添加提示,并以某种好的方式对其进行格式化。

像这样的东西:

$ ls
. ..
Last command took 0.001s
$ 
Run Code Online (Sandbox Code Playgroud)

jim*_*mij 6

您需要两个函数和一个计时器。第一个函数在您在命令行中按 Enter 键后、实际命令开始之前执行。第二个函数在命令完成后、显示提示之前执行。计时器仅计算启动 shell 后的秒数。这zsh三个钩子分别称为precmdpreexecSECONDS

bash计时器的名称中是相同的,函数precmd成为变量PROMPT_COMMAND,但不幸的preexec是函数丢失了,所以你需要自己编写它(没有什么太大的挑战性,但也不是微不足道的)或者从外部源安装已经编写的钩子,例如https://github .com/rcaloras/bash-preexec

现在我们只需要将所有部分粘合在一起,最少的代码如下所示:

preexec() {
    cmd_start="$SECONDS"
}

precmd() {
  local cmd_end="$SECONDS"
  elapsed=$((cmd_end-cmd_start))
  PS1="$elapsed "
}
Run Code Online (Sandbox Code Playgroud)

把所有东西都放进去.bashrc