すべてのbashコマンドの前のコマンド


18

誰もがbashセッションのすべてのコマンドの前に「時間」コマンドを置く手段を知っていますか?


1
だから...あなたは自動的にすべてのコマンドラインに「時間」を追加したいですか?
いんちきキホーテ

1
はい、完全に...パフォーマンス測定のために明らかに
-jthoenes

回答:


37

前に間違った答えをしてすみません、あなたの質問を誤解しました。

シェルで実行するすべてのコマンドの前に時間を追加するには、次のようにします

bind 'RETURN: "\e[1~time \e[4~\n"'

これにより、リターンキーが再バインドされます。これで改行を書き込む代わりにリターンを押すたびに、\ n行の先頭に移動し、テキスト「時間」とスペースを入力し、行の末尾に移動して改行を入力することで、\ n効果。

Enterキーを犠牲にしたくない場合は、次のようにコマンドをバインドすることで、F12のような「2番目の」ベンチマーク入力キーを作成できます。

bind '"\e[24~": "\e[1~time \e[4~\n"'

ここで、リターンキーを置き換える代わりに、F12をバインドしました。

このすべての背景は、bashがGNU readlineを使用してコマンドを読み取ることです。したがって、readlineは、さらにコマンドを操作するなどの出発点として適しています。


1
+1素敵なソリューション!通常のエンターキーとは別にベンチマークのエンターキーを持つというアイデアが好きです。
いんちきキホーテ

それは賢いアイデアです。すべてのコマンドの前にユーザー定義関数を実行するように一般化するにはどうすればよいですか?同じバインディングでbashコードとreadline関数を組み合わせる方法がわかりません。
ジル 'SO-悪であるのをやめる'

これはMacで実行されませんか?ターミナルでコマンドを実行しましたが、Enterキーは何もしないようです。
akki

6

これはこの質問の範囲外であることを理解していますが...

zsh(私の知識にはbashのスーパーセットである、)あなたがあなたの中で次の変数を設定した場合.zshrc、ファイル:

export REPORTTIME=5

5秒以上かかるすべてのコマンド(私は確信しています)は、の出力を表示しますtime。より迅速に完了するすべてのコマンドはそうではありません。そして、これらの場合、人はあまり気にしないので、物を散らかさないのはいいことです。また、他にzshも便利な機能がたくさんあります。


いいヒント。一方でzshのは確実の機能のスーパーセットがあるbashのを、その構文はの構文のスーパーセットではありませんbashの、それは交換「のドロップ」ではありません。
クリスジョンセン

1

プロンプト文字列に\ tを含めます。それはあなたがそれを含むポイントであなたのプロンプトに時間を含みます。参照:http : //www.ibm.com/developerworks/linux/library/l-tip-prompt/


これは、プロンプトが生成された時点の現在の時刻であり、前のコマンドの実行にかかった時間ではありません。
追って通知があるまで一時停止します。

本当; そして、そのプロンプトと次のプロンプトの現在時刻との違いはランタイムです(もちろん、入力時間を差し引いたものです-ここに貼り付けはあなたの友達です)。キーの再割り当ては必要ありません。
Jロバート

0

PS1は、このようなことを行う標準的な方法のようです。


2
実際に実行されたコマンドではなく、表示を変更します。
user1686

@grawity正しい-しかし、それはあなたが望むものを正確に得るでしょう...すべての行に時間を追加します。
ジェイソンスンドラム

3
これは、何をtime行うかとはまったく異なります(コマンドの実行にかかった時間を測定します)。
user1686

@grawity、あなたは正しいと思います-あなたは自分で減算を行わなければなりません。@Jrobertも同じ考えを持っていたようです。
ジェイソンスンドラム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.