web-dev-qa-db-ja.com

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

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

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

例えば。私の歴史が:

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

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

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

143
TLP

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

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

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


少しの背景情報:

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

Readlineの詳細については、 bash manual をお読みください。また、さらに多くの 履歴関連のreadlineコマンド を見つけることもできます。

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

  1. ターミナルでcatを開始します(catのみ、それ以上の引数はありません)。
  2. キーボードでキーを入力すると、^[[Aが上向き矢印、^[[Bが下向き矢印になります。
  3. ^[\eに置き換えます。
193
lesmana

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

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

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

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

30
user287613

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

12
Andrew Moss

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 で既にフランス語で説明されています。

4
bcag2

https://github.com/dvorka/hstr を試してみたいと思うかもしれませんコマンドが重要)-矢印キーを使用して簡単に履歴をナビゲートできます:

enter image description here

簡単にできます bound to Ctrl-r および/または Ctrl-s

2
Martin Dvorak

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

  1. cTRL + UPおよびCTRL + DOWNを押して、履歴内で上下に移動します(同じプレフィックスを持つエントリのみ)。これは、UPおよびDOWNのみを使用して、完全な履歴で上下に移動する標準機能と共存できます。
  2. cTRL + RIGHTおよびCTRL + LEFTを押して、コマンドラインで次/前のWordにジャンプします
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を実行)します。

0
user27164