0

我开始使用这个答案在我的提示符中打印经过的命令时间。但是每当我进入修复模式时,也会回显陷阱命令。这是一个例子:

[last: 0s][~]$ sleep 2 && echo hello world
hello world
[last: 2s][~]$ fc
sleep 2 && echo hello world
timer_start
timer_start
hello world

我发现这个更复杂的提示也使用了 DEBUG 陷阱,但没有遇到这个问题——它只是打印命令和结果:

...$ sleep 2 && echo hello world
hello world
...$ fc
sleep 2 && echo hello world
hello world

但我无法弄清楚它是如何做到这一点的。如何在不timer_start回显每个执行的命令的情况下使用第一个示例?

4

1 回答 1

2

set -vx表明 start_timer 在 stop_timer (PROMPT_COMMMAND) 被调用时被调用,所以它被调用了太多次。

更短的解决方案:

trap 'timer=$SECONDS' DEBUG
PS1='[last: $((SECONDS-timer))s][\w]$ ' 

甚至更短

trap 'SECONDS=0' DEBUG
PS1='[last: ${SECONDS}s][\w]$ ' 

另一种解决方案:在提示中使用时间

trap 'date "+[%H:%M:%S]"' DEBUG
PS1='[\t][\w]$ '
于 2012-09-11T09:52:39.993 回答