web-dev-qa-db-ja.com

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

Grepよりもコマンドの履歴ファイルを検索するより良い方法はありますか?コマンドがどのように始まるかはわかりますが、コマンドが履歴からどれだけ遡っているかはわかりません。

pdate:は以前はzsh固有でしたが、重複する回答があるため、ここで任意のシェル(またはモード(vi/emacs))に自由に回答してください。具体的かどうかに注意してください。

82
xenoterracide

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

(これがこの質問に関連する唯一のものだと思いますが、履歴コマンドのはるかに多くをカバーしました この答え

78
Michael Mrozek

Bashを使用する場合は、次のように入力します。 Control-R 次に入力を開始します。タイピング Control-R テキストを入力した後に繰り返し入力すると、一致するコマンドラインに戻ります。

32
grendel

これが役立つかどうかはわかりませんが、私は使いたいです ctrl-r 次に、コマンドの入力を開始します。それはあなたの歴史を通り抜け、最初の一致をあなたに提示するはずです。試合を切り替えるには、 ctrl-r 再び。

18
decriptor

以下を~/.inputrcに追加した場合

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

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

(一部の人は\e[A\e[Bを使用することを好むかもしれません。 Up そして Down 新しいキーをバインドする代わりにアクション)。

17
ephemient

によって呼び出されるインタラクティブなプロンプト Ctrl-R既に述べたように、最も便利な方法です。さらに、リマップが人気です Up そして Down 現在コマンドラインにある接頭辞の履歴を検索する矢印キー。ただし、これにはいくつかの ~/.inputrcファイル

古典的でインタラクティブ性の低いソリューションは、シェル履歴拡張を使用することです。タイピング

!foo

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

!?foo

fooを含む最後のコマンドを実行します。シェルがBashまたは互換であることを前提として、履歴の拡張に関する詳細情報は Bashリファレンスマニュアル に記載されています。

9
Adam Byrtek

stty -ixon~/.bashrcファイルに追加すると、 Ctrl-s 反対方向に行きます Ctrl-r

!lsと入力すると、bashは履歴を調べ、「ls」で始まる最新のコマンドを実行します

3
Kevin M

zsh固有である可能性があります。調査中 この答え I foundvi-history-search-backwardで検索できます / viモード(私がいたとは言いませんでした)では、次を使用できます。 n そして N 前方と後方をそれぞれ検索します(押した後 enter)。

2
xenoterracide

これが言及されていないことに驚いていますが、これを行うことでbashまたはkshでviモードを選択できます。

set -o vi

...またはこれを~/.inputrcのコンテンツとして使用します(GNU bashなどのプログラムで使用されるreadlineの場合):

set editing-mode vi

その後、あなたは使うことができます Esc 入力するにはコマンドモードを使用して k 歴史に戻る j 先に進みます。次を使用して検索することもできます / 通常どおり検索する ? 逆に検索します。

~/.inputrcを使用する場合、これはGNU bashだけでなく、GNU CLISPなどのreadlineや、 MySQLコマンドシェルおよびCPANシェルと同様。

2
Mei

(Ctrl-Rコマンドを使用して)逆検索を使用しているときに前方に切り替えるには:

  1. .bashrcファイルを開きます。
    Sudo gedit ~/.bashrc

  2. この行を追加します(文字「f」は、システムでまだ使用されていない別のものに置き換えることができます)。

    bind '"\C-f": forward-search-history' 
    
  3. ファイルを閉じて、次のコマンドで.bashrcを更新します(または別のターミナルを開きます)。
    source ~/.bashrcまたは. ~/.bashrc

ショートカットで歴史の中で前進することができるようになりました:Ctrl + f

Ubuntu 18.04 LTSの作業

2

ほとんどの場合、以下の2つを使用します。
しかし、どちらも開始文字を検索することに注意してください。

  1. tcsh:コマンドのいくつかの文字を入力します Esc+p そのキーシーケンスで始まる前のコマンドが表示されます。もう一度押すと、別のコマンドが表示されます。
  2. kshfc -e - <SPACE><first few char for your previous >を使用します。これにより、そのシーケンスに一致する最後のコマンドが実行されます。

のようなものを見つけることができませんでした Ctrl+R 私のkshとtcshのBashで。

1
Hemant

使用する方法があります Ctrl-R tcshを使用します。 ~/.cshrcに以下を追加します:

bindkey "^r" i-search-back(キャレット記号とrの文字です)

それは私にとって最大の時間節約になります。

1
Alain

@ephemientと同様の回答ですが、.bashrcに入れることができます

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

フレーズの一部を入力し、上/下矢印を使用して、一致する最新のオプションを参照します。これは、MATLABのデフォルトの動作です。

ほとんどの人にとって、設定を新しいシステムに移植したい場合は、~/.bashrcそれからあなたはそれを手に入れなければならないということ~/.inputrc

1
Matt S.

はい、少なくともzshを使用している場合は存在します。コマンドの入力を開始し、次に押すだけです M-p (ESCp)そして、入力した内容と一致する以前のコマンドを検索します。もう一度押すと、次の一致が見つかります。

0
dkagedal