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


78

grepよりも、コマンドで履歴ファイルを検索するより良い方法はありますか?コマンドが何から始まるのか、私にはある程度のアイデアはありますが、それが歴史のどこまで遡ったのかはわかりません。

更新:以前はzsh固有でしたが、回答が重複しているため、ここで任意のシェル(またはモード(vi / emacs))に自由に答えてください。

回答:


73

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

(これがこの質問に関連する唯一のものだと思いますが、この回答では履歴コマンドの多くを取り上げました)


4
「ctrl + r」をどのように見えるようにするのですか?
xenoterracide

13
@xen <kbd>Ctrl+R</kbd>回答元
Michael Mrozek

SEエンジンがhtmlに感謝していることに気づきませんでした。
xenoterracide

kbdキーワードが「ctrl」と「+」を正しく解釈することを知りませんでした。以前は各キーに個別にタグを付けていました。ありがとう!
オリビエデュラック

2
@OlivierDulac残念ながら、そうではありません。キーをフォーマットするために使用した方法です。誰かが後で私の答えを編集して別々のキーにした
Michael Mrozek

30

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


18

これが役立つかどうかはわかりませんが、私はctrl- を使用しrてコマンドを入力し始めます。それはあなたの歴史を経て、最初の試合を提示する必要があります。ちょうどヒット試合を切り替えますctrl- r再び。


2
申し訳ありませんが、zshを忘れました。〜/ .zshrcにこのキーバインドを追加する必要がある場合があります。bindkey '^ R' history-incremental-search-backward
decriptor

17

以下を追加する場合 ~/.inputrc

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

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

(新しいキーをバインドする代わりに、通常のアクションとアクションを置き換える\e[Aandの使用を好む場合があります。)\e[BUpDown


これらのコマンドをAlt + Upとにマップすることを好みますAlt + Down。端末エミュレートが使用するキーボードエミュレーションに応じて、これらの組み合わせは\E[Aand \E[A(例:Linux Key BindingsのKDE Konsole)または\E[1;3Aand \E[1;3B(例:XFCE TerminalまたはX Free 4 BindingsのKDE Konsole )にマッピングされます。
クリスチャンヘレンツ

9

Ctrl- によって呼び出されたインタラクティブプロンプトは、R既に説明したとおり、最も便利な方法です。さらに、現在コマンドラインにあるプレフィックスの履歴を検索するために、リマップUpおよびDown矢印キーを使用するのが一般的ですが、これには~/.inputrcファイルへのいくつかの変更が必要です

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

!foo

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

!?foo

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


6

あなたが追加した場合stty -ixon、あなたに~/.bashrcファイルそしてCtrl- sとは反対の方向に行くだろうCtrl- r


C-sこの目的で使用したかったのですが、端末がフリーズしました。気をつけて!(まあ、私はまだ何も採用していませんstty ixonが、これが何のためかは
わかり

3
@imz:C-q「フリーズ解除」します。これC-sは、通常のソフトウェアフロー制御文字で、低速シリアル接続が使用されたときに出力のフローを手動で中断(一時停止)するのに便利でした。現在、ほとんどの場合、出力は非常に高速であるため、押すと表示したいものC-sが既にスクロールされています。stty -ixonソフトウェアフロー制御をオフにします。
デニスウィリアムソン

素晴らしい!私はこのような歴史を前にスクロールする方法を何年も探してきました。
marlar

3

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


2

zsh固有の場合があります。研究では、この答えを私が見つけ vi-history-search-backwardつで検索することを可能にする/あなたがして使用することができます(私は中だった言及しなかった)のviモードにnしてN(押した後、それぞれ前方と後方検索しますenter)。


2

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

set -o vi

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

set editing-mode vi

その後、を使用Escしてコマンドモードに入り、を使用kして履歴に戻り、先に進むことができますj。を使用/して検索することもできます。通常の?検索と、逆の検索が可能です。

を使用する~/.inputrc場合、これはGNU bashだけでなく、CLISPなどのGNU readlineや、MySQLコマンドシェルやCPANシェルなどのプログラムを使用するあらゆるもので機能します。


2

(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での作業


1

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

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

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


3
Ctrl + rの動作は、kshでBashとは少し異なります。Ctrl + r を押し、探している文字列を入力してEnterを押します。同じものを検索するには、Ctrl + rを押して、文字列を再入力せずに入力します。set -o emacsちなみに、これはモードです。
デニスウィリアムソン

@デニス:+1 :-)
ヘマント

1

使用する方法があるCtrl- Rtcshのは。に次を追加します~/.cshrc

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

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


1

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

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

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

ほとんどの人にとって、設定を新しいシステムに移植したい場合は、それを自分でやらなければならないことを覚えておくのが簡単~/.bashrcです~/.inputrc


0

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


この答えは、より多くの説明でできます。
プネヘヘ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.