すべてのbashコマンドに関する時間とその他の情報を報告する方法は? [コピー]

すべてのbashコマンドに関する時間とその他の情報を報告する方法は? [コピー]

端末で実行されるほとんどのタスクは計算に時間がかかり、bashに最後に時間レポートを出力させたいと思います。すべてコマンドが端末に入力されます。このためにbashrcに追加できるものはありますか?

例:

$ find / -ls
<find / -ls return info>
start time = 10:21:54 | end time = 10:31:34 | time lapsed = 00:10:20
$

または

$ make all
<make all return info>
start time = 10:21:54 | end time = 10:31:34 | time lapsed = 00:10:20

cdなどのコマンドの例外リストを追加できればと思いますが、あまり気にしません。

答え1

私は次のことを試しました.bashrc

echo -ne "$PS1"
while IFS= read -er line;do
    eval "time $line"
    echo -ne "$PS1"
done

これはおおよその目的を果たしますが、いくつかの注意事項があります。

  • プロンプトが実際に破損しています(シェルは通常、\Wプロンプトをエコーする前にプロンプ​​トの同様のシーケンスを解釈します)。
  • コマンドライン編集機能が失われます(例:CTRL+は利用できません)。Lclear
  • 他にもいくつかあります。

私はシェル機能を通してこれを選択的に有効にするのが良い妥協だと思います。

timed_commands() {
    [ "$1" = off ] && exec bash
    PS1='$ '  # Put something simple here
    while IFS= read -erp "$PS1" line;do
        eval "time $line"
    done
}

以下を使用して開閉timed_commandsします。timed_commands off

コメントをいただいた@jthillに感謝-eしますread

答え2

今これはあまりにも悪いですが、効果があるかもしれません...

端末ID文字列(クエリから返された文字列)を「time」に設定します。末尾のスペースに注意してください。次に、クエリで終了するようにプロンプ​​トを設定します。プロンプトが表示されるたびに、端末は自動的に時間とスペースを入力し、ユーザーはコマンドを入力します。この機能が多くの端末で発生するのを防ぐために無効になっているため、この機能がすべての端末で機能するわけではありません。

xtermと連携させるには、.Xresourcesに次の行を追加し、xrdbを使用して再ロードします。

xterm*answerbackString: time ^[0D^[0A
URxvt*answerbackString: time ^[0D^[0A
xterm_color*answerbackString: time ^[0D^[0A

ここで ^[ はエスケープ文字です (xterm は AnswerbackString の末尾にある空白が好きではないのでカーソルを振りました。

次に、プロンプト文字列の末尾にENQを追加します(bash固有の例)。

PS1="${PS1}\[\005\]"

新しいxtermで新しいシェルを起動し、正しく動作するように祈ります。 \005はENQであり、[および]は\005がカーソルを移動しないことをbashに通知します。

関連情報