プロンプトで最後のコマンドを開始してから経過した時間を表示します。

プロンプトで最後のコマンドを開始してから経過した時間を表示します。

最後のコマンドを開始してから経過した時間を表示する方法はありますか?私はこれを見つけました:PS1プロンプトに経過時間が表示されます。ただし、これは、最後のコマンドが完了してから新しいコマンドが完了するまでに経過した時間を示します。

私の考えは何とかプロンプトに追加することを強制することです。time今後私が入力するすべてのコマンドは良い方法でフォーマットします。

このような:

$ ls
. ..
Last command took 0.001s
$ 

答え1

2つの機能とタイマーが必要です。最初の機能は、コマンドラインでEnterを押してから実際のコマンドが開始される前に実行されます。 2 番目の機能は、コマンドの完了後にプロンプ​​トが表示される前に実行されます。タイマーは、シェルが始まってからの秒数を計算します。これら3つのフックを、zshと呼びます。precmdpreexecSECONDS

bashタイマーの名前が同じ場合、関数は変数にprecmdなりますが、PROMPT_COMMAND残念ながらpreexec関数がないため、直接作成するか(難しいことではありませんが、マイナーではありません)、外部ソースからすでに作成されたフックをインストールする必要があります。はいhttps://github.com/rcaloras/bash-preexec

今、すべての部分を一緒に貼り付けるだけです。最小限のコードは次のとおりです。

preexec() {
    cmd_start="$SECONDS"
}

precmd() {
  local cmd_end="$SECONDS"
  elapsed=$((cmd_end-cmd_start))
  PS1="$elapsed "
}

それにすべてを入れてください.bashrc

関連情報