対話型シェルで冗長コマンド履歴をマージする方法は?

対話型シェルで冗長コマンド履歴をマージする方法は?

以前にインタラクティブシェルセッションで使用されていたコマンドを見つけようとすると、次の   (up arrow)結果が表示されることがあります。

$ls         # 1st time push `up arrow`
$ls         # 2nd time push `up arrow`
$ls         # 3rd time push `up arrow`
$ls         # 4th time push `up arrow`
$ls         # 5th time push `up arrow`
$ls         # 6th time push `up arrow`
$make       # 7th time push `up arrow`
$make       # 8th time push `up arrow`
$make       # 9th time push `up arrow`
$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"   # Bingo!

次のような場合は良いと思います。

$ls         # 1st time push `up arrow`
$make       # 2th time push `up arrow`
$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"   # Bingo!

重複記録は一般的に役に立たないからです。

Bashでこれを行うにはどうすればよいですか?

ベストアンサー1

ignoredupsHISTControl変数を設定してこれを実行できます。

HISTCONTROL="ignoredups"

オプションでエクスポートし、

export HISTCONTROL="ignoredups"

環境変数として作成します。 ~からbash(1) マニュアルページ:

HISTCONTROL

    コマンドが履歴リストに保存される方法を制御するコロンで区切られた値のリスト。値リストにが含まれている場合は、ignorespaceaで始まる行スペースキャラクターは履歴リストに保存されません。値を使用すると、以前のignoredups 履歴エントリと一致する行は保存されません。の値はandの略語ignorebothです。値を指定すると、行を保存する前に、現在の行に一致するすべての前の行が履歴リストから削除されます。上記のリストにない値は無視されます。もしignorespaceignoredupserasedupsHISTCONTROL設定されていない場合、または有効な値が含まれていない場合、シェルパーサーによって読み取られたすべての行は、次の値に従って履歴リストに保存されます。 HISTIGNORE。複数行の複合コマンドの 2 行目以降の行はテストされず、値に関係なく履歴に追加されます。 HISTCONTROL

これは実際に正確に質問は何を求めますか?ユーザーがruby …、、、、、、、、、 (別々の連続行で)コマンドを入力すると、履歴リストは、、になりmakeます。 3回押すとコマンドに戻ります。makemakelslslslslslsruby …makels (up arrow)ruby

おすすめ記事