シェルの履歴を検索する最良の方法

シェルの履歴を検索する最良の方法

grep よりも履歴ファイルでコマンドを検索する良い方法はありますか? コマンドが何で始まるかはある程度わかっていますが、履歴のどのくらい前までさかのぼれるかはわかりません。

アップデート:以前は zsh 固有でしたが、回答が重複しているため、ここでは任意のシェル (またはモード (vi/emacs)) について自由に回答してください。固有のものである場合はその旨を明記してください。

答え1

Ctrl+はR通常最善の方法です。記述子は言った!stringで始まる最新のコマンドを実行するstring!?string?、 を含む最新のコマンドを実行する を使用することもできますstring

(この質問に関連するのはこれだけだと思いますが、履歴コマンドについてはさらに詳しく取り上げました。この答え

答え2

Bash を使用する場合は、Control「-」Rと入力してから入力を開始します。テキストを入力した後にControl「-」Rを繰り返し入力すると、一致するコマンド ラインに戻ります。

答え3

以下を追加すると~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Bash を再起動すると、入力を開始できます。その後、Page Upとを使用してPage Down、入力した同じプレフィックスで始まる行の履歴を前後に移動できます。

(新しいキーをバインドする代わりに、通常のおよびアクションを置き換える\e[Aおよび を使用することを好む人もいます。)\e[BUpDown

答え4

すでに述べたように、Ctrl-で呼び出される対話型プロンプトが最も便利な方法です。さらに、リマップと矢印キーを使用して、現在コマンドライン上にあるプレフィックスの履歴を検索するのもよく使用されますが、これにはいくつかのRUpDown~/.inputrcファイルの変更

古典的であまりインタラクティブではない解決策は、シェルの履歴拡張を使用することです。

!foo

で始まる最後のコマンドを実行しますfoo

!?foo

を含む最後のコマンドを実行しますfoo。履歴の展開の詳細については、Bash リファレンスマニュアルただし、シェルが Bash または互換シェルであると仮定します。

関連情報