有没有办法显示自我启动最后一个命令以来经过的时间?我发现这个:PS1 提示显示经过的时间,但这将显示自上一个命令完成到新命令完成为止经过的时间。
我的想法是以某种方式强制在我输入的每个命令time之前添加提示,并以某种好的方式对其进行格式化。
像这样的东西:
$ ls
. ..
Last command took 0.001s
$
Run Code Online (Sandbox Code Playgroud)
您需要两个函数和一个计时器。第一个函数在您在命令行中按 Enter 键后、实际命令开始之前执行。第二个函数在命令完成后、显示提示之前执行。计时器仅计算启动 shell 后的秒数。这zsh三个钩子分别称为precmd、preexec和SECONDS。
在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。