我开始使用此answer在我的提示中打印已用完的命令时间。但每当我进入修复模式时,trap命令也会被回显。这是一个例子:
[last: 0s][~]$ sleep 2 && echo hello world
hello world
[last: 2s][~]$ fc
sleep 2 && echo hello world
timer_start
timer_start
hello world
我发现this much more complicated prompt也使用了DEBUG陷阱,但没有遇到这个问题 - 它只是打印命令和结果:
...$ sleep 2 && echo hello world
hello world
...$ fc
sleep 2 && echo hello world
hello world
但我无法弄清楚它是如何实现这一目标的。如何在没有为每个执行的命令回显timer_start
的情况下使用第一个示例?
答案 0 :(得分:2)
set -vx
表示在调用stop_timer(PROMPT_COMMMAND)时调用start_timer,因此调用它的次数太多了。
更短的解决方案:
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]$ '