2009-07-17 19:23:49 +0000 2009-07-17 19:23:49 +0000
302
302

bashの履歴を検索してコマンドを再実行するには?

bashで履歴を検索して結果を実行することはできますか?

回答 (10)

38
38
38
2009-07-17 20:40:32 +0000

crtl+R の代わりに、

!text

と入力することで履歴を検索することができます。

shopt -s histverify

これは間違ったコマンドを実行しないように.bashrcに記述することをお勧めします。

0x1&

これはbashに、***履歴操作(!!:s/prev_text/after_textのような)の後に、結果として得られた行をコマンドプロンプトに配置するように指示します。その後、コマンドを確認したり編集したりして、Enter キーを押すことができます。

33
33
33
2009-07-17 20:21:39 +0000
history | grep "stuff"

と入力することもできます。

16
16
16
2011-02-02 20:32:12 +0000

私は履歴を逆に検索するよりも、履歴を逆に検索する方が好きです。前者では、検索キーを押してから検索文字列を入力するのとは対照的に、数文字のコマンドを入力してから検索キーを押すことができます。

私のシステムのデフォルトでは、M-p と M-n は似たような関数にバインドされていますが、私は矢印キーにバインドする方が好きです。

bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
13
13
13
2014-09-25 16:45:14 +0000

私は本当に素晴らしいエイリアス、hを持っています。それは本当に “history | grep "ですが、"grep -E -v”

alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "
h aliases
2003 less .bash_aliases
``` のように使用して、以前の "hコマンド "エントリをフィルタリングしています。
12
12
12
2009-09-10 14:23:48 +0000

素晴らしい書き込みですね、ショーン! これをコメントに入れようと思っていたのですが、数点の評価ポイントを恥ずかしがっています。)

もう一つの関連した便利なテクニックは、単語を変更しながら前のコマンドを実行する機能です。

$ echo my name is bob my name is bob $ ^bob^jordan echo my name is jordan my name is jordan

0x1&

コマンドを実行する前に、コマンドが展開され、置換され、出力されることに注意してください。

6
6
6
2014-12-18 16:37:14 +0000

Ctrl-r を使った履歴のナビゲーションは面倒なので、hh .

を検討してみてはいかがでしょうか。 [ https://github.com/dvorka/hstr ]0x3&

これは、コマンドの実行を含めて、ナビゲーションをよりシンプルに、わかりやすく、効率的にしてくれます。

4
4
4
2014-09-04 04:55:04 +0000

bash のコマンドプロンプトで control-R と入力して、必要なコマンドを数文字入力すると、bash のリードライン機能がそのコマンドの履歴を検索します。

検索を開始した後、control-R を再度入力すると、次の一致するコマンドにジャンプすることができます。

3
3
3
2015-11-22 15:21:56 +0000

シェルが vi キーバインドを使用するように設定されている場合(set -o vi または set editing-mode vi$HOME/.inputrc が含まれている場合)、<Esc>/some-command<Return> で検索して n (next) または Shift-n (previous) を押すと、コマンドラインの履歴を循環させることができます。

2
2
2
2014-09-04 05:11:10 +0000

John1024が提案したようにCTRL+Rはうまく機能しますが、最近のコマンドの多くが似たようなもので、すべてを素早くスキャンしたい場合には少々面倒です。別の方法としては、 history .

$ history | grep keyword
0
0
0
2019-05-22 13:17:52 +0000

HSTRは好きなのですが、たまにインストールできないことがあります。そこで、 fzf を使ってエイリアスを書いてみました。これはその動作を模倣したものです(hx, “history execute "を意味します)

alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
  • history : まあ、履歴を取得する
  • sed : リストから数字の列を削除する (POSIX)
  • fzf : ここに魔法があり、対話的にリストをファジーサーチしたり、C-JC-Kで移動したり、Enterでコマンドを実行したりすることができます。
  • --height : 表示される行数を設定します。
  • --tac : リストを元に戻す (履歴としてはより論理的)
  • --tiebreak=index : fzf が結果を更新したときに履歴の順序を保持する。