如何在fix命令中使用debug trap而不回显trap命令?

时间:2012-09-11 06:27:45

标签: bash

我开始使用此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的情况下使用第一个示例?

1 个答案:

答案 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]$ '