Bash履歴検索、部分+上矢印


146

検索しましたが、何も見つかりませんでした。ターミナルを使用して、bashの機能を探しています。

昔、debianシステムのユーザーがいて、友人が便利な履歴検索機能を設定してくれました(その時はtcshを使用したと思います)。そして、部分文字列に基づいて検索を行います。

たとえば、私の履歴が次の場合:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

と入力し.、上矢印を押すと、次のように表示されます./script.pl arg1。もう一度押すと./script.pl、などが表示されます。

grep.bash_historyで実行するのとよく似ています。この機能を取得する方法はありますか?



1
@Marcelは同じ答えのように見えますが、検索でそれを見ましたが、iPythonとShellキーワードでそれを私の質問に結び付けませんでした。
TLP

回答:


197

に次の行を追加します~/.inputrc

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

で始まる行#はコメントです。何が後方で何が前方であるか思い出せません。それを試してください。たぶん、あなたは前後に切り替える必要があります。


少しの背景情報:

Bashはプロンプトを処理するためにreadlineを使用しています。~/.inputrcreadlineの構成ファイルです。これは、IPythonなど、readlineライブラリを使用する他のソフトウェアでも有効になることに注意してください。

readlineの詳細については、bashのマニュアルを参照してください。履歴関連のreadlineコマンドを見つけることもできます

矢印キーのエスケープコードを取得するには、次の操作を実行できます。

  1. catターミナルで開始します(cat追加の引数はありません)。
  2. キーボードでキーを入力すると^[[A、上矢印と^[[B下矢印のようなものが得られます。
  3. 交換してください^[\e

1
すばらしいですが、このソリューションはctrl-left / ctrl-rightショートカットを無効にします。
エアル

誰がどのように私はメイクのために同じことを達成することができます私に言うことができる
Hiteshクマール

@lesmana、猫の部分だけに余分なポイントを与える
マイクD

@Eyalを次に挙げて、誰かが私がこれをどのように持つことができるかについてアドバイスを持っていますが、ctrl-left / ctrl-rightショートカットを保持しますか?
kbrose

6
すべてのデフォルトを保持するには$include /etc/inputrc、できれば最初の行にaddを追加します。
トゥリオカサグランデ

31

/etc/profile.d/にモード644でsetup_readline.shという名前のファイルを作成し、次の内容でログインし、優先キーを確認します。

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

これを行うには最適な方法だと思います。主に、シェフ、パペットなどの構成管理システムを使用している場合

そして、システム構成はそのままです!


4
奇妙なことに、〜/ inputrcは機能しませんでしたが、これらのコマンドを.bash_profileに入れると機能しました。
ジョー

1
.inputrcはホームフォルダーに存在しないため、これらの種類の設定を.bashrcに保存して、設定用に1つのファイルを持ち歩くことができます。したがって、これはおそらく受け入れられたものよりも良い答えです。
シタルシャー

.inputrcは私にとっては素晴らしい動作をしますが、をロードしscreenた後は動作しません。奇妙なことに、他の.inputrcショートカットは機能しますが、これらは機能しません。だから私は両方のソリューションを今使用しています。
-Orwellophile

これは、例えば、何かをするためにサーバーにログインし、これらの機能が欠けていて、サーバー上の〜/ .inputrcを編集してリロードしたくない場合に非常に役立ちます。
danmactough

13

Ctrl + Rは、このような機能を提供します。部分的なコマンドの入力を開始すると、上矢印と下矢印でナビゲートできる古いコマンドが表示されます。詳細:http : //www.nuxified.org/blog/ctrl_r_in_the_bash_shell


2
お返事をありがとうございます。はい、私はそれを試みましたが、私はそれを少し見つけます...気難しい。パーシャルで始まるコマンドをスクロールすることはできません。最初のコマンドのみが表示されます。また、コマンド全体で文字を検索しますが、これは無意味です。
TLP

5
@TLP、繰り返し打撃Ctrl+r
akostadinov 14年

4

Trusty 14.04で作成する「〜/ .inputrc」に関するlesmanaの回答を完了するには、「〜/ .bashrc」で確認/追加します(最初の行は「〜/ .bashrc」に既に存在します)。

shopt -s histappend  
PROMPT_COMMAND='history -a'  

https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historiqueで既にフランス語で説明されています


2
このコマンドは基本的に、セッションの終了を待つのではなく、コマンドを履歴ファイルにすぐに追加するようにbashに指示します。多くの端末を開いており、1つの端末で履歴を失いたくないが、それ以外の場合は必要ない場合に便利です。digitalocean.com/community/tutorials/...
Shitalシャー

3

おそらく、メトリックスに基づいて(コマンドの頻度、長さなど)Bash履歴のシンプルで複数行のシンプルなフィルタリングを提供するhttps://github.com/dvorka/hstrを試してみたいと思うかもしれません-あなたは使用することができます履歴を簡単にナビゲートするための矢印キー:

ここに画像の説明を入力してください

これは、簡単にすることができバインドCtrl-r及び/またはCtrl-s


0

次のソリューションは、上記のアプローチの一部を組み合わせて拡張します。次の動作を実現するために、次の行を~/.bash_aliasesファイルに追加します(の必要はありません~/.inputrc)。

  1. CTRL + UPおよびCTRL + DOWNを押して、履歴内で上下に移動します(同じプレフィックスを持つエントリのみ)。これは、UPおよびDOWNのみを使用して、完全な履歴で上下に移動する標準機能と共存できます。
  2. CTRL + RIGHTおよびCTRL + LEFTを押して、コマンドラインの次/前の単語にジャンプします
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'

source ./bash_aliases変更を適用するには、シェルに再ログイン(またはを実行)します。

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