2012-09-11 86 views
0

我開始使用此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陷阱,但不會從此遭受problem-它只是打印命令和結果:

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

但我可以」弄清楚它是如何實現這一點的。我怎樣才能使用第一個例子而不用爲每個執行的命令回顯timer_start

回答

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]$ ' 
+0

這不工作的時間。我認爲PS1在你的例子中被分配了一次,所以提示值總是相同的:0s。 – user1564022

+1

沒有因爲單引號被解釋爲每個命令 –

+0

它仍然不適用於我(在版本3.2.48),即使我對原因的猜測是錯誤的。它總是打印0。 – user1564022