0

この回答を使用して、経過したコマンド時間をプロンプトに出力し始めました。しかし、修正モードに入るたびに、trap コマンドもエコーされます。次に例を示します。

[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 -vxstop_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]$ '
于 2012-09-11T09:52:39.993 に答える