web-dev-qa-db-ja.com

.bash_historyのエントリが重複しないようにする方法

同じコマンドが私の履歴に何度もリストされています。どうすればこれを回避できますか? HISTCONTROLを介して可能であることは知っていますが、正しい方法が見つかりませんでした。

107
karthick87

bash manページから:

ヒストコントロール

コマンドを履歴リストに保存する方法を制御する、コロンで区切られた値のリスト。値のリストにignorespaceが含まれる場合、スペース文字で始まる行は履歴リストに保存されません。値がignoredupsの場合、前の履歴エントリに一致する行は保存されません。 ignorebothの値は、ignorespaceおよびignoredupsの省略形です。値がerasedupsの場合、現在の行に一致する以前のすべての行は、その行が保存される前に履歴リストから削除されます。上記のリストにない値は無視されます。 HISTCONTROLが設定されていない場合、または有効な値が含まれていない場合、シェルパーサーによって読み取られたすべての行がHISTIGNOREの値に従って履歴リストに保存されます。複数行の複合コマンドの2行目以降はテストされず、HISTCONTROLの値に関係なく履歴に追加されます。

したがって、次の行を~/.bashrcに追加します。

export HISTCONTROL=ignoreboth:erasedups

122
Isaiah

これを~/.bashrcに貼り付けます:

export HISTCONTROL=ignoredups

代わりにignorebothを使用できます。これは、ignorespaces(スペースで始まるコマンド)とignoredups(重複)の両方の略記です。

ウェブサイトからコマンドをコピーすると、スペースを含むコマンドを無視するデフォルトの動作が非常に迷惑であり、誤ってスペースにコピーしたため保存されないため、ignoredupsを単独で使用します。 ...しかし、それぞれに。

23
Oli

これを~/.bashrcに入れると、異なるセッション間で@alvinのソリューションがwlellとして適用されます

HISTCONTROL=ignoredups:erasedups
shopt -s histappend
Prompt_COMMAND="history -n; history -w; history -c; history -r; $Prompt_COMMAND"

ソース: Linux:Bashの履歴:「ignoredups」および「erasedups」の設定は、セッション全体で共通の履歴と競合します

10
Nour Wolf
export HISTCONTROL=erasedups
4
withoutasound

以下を~/.bashrcに追加します。

export HISTCONTROL=ignoredups

これを行うには、次のコマンドを使用できます。

nano ~/.bashrc
3
jrg

すべての新しいコマンドを一意に記録することは注意が必要です。最初に~/.profileなどに追加する必要があります:

HISTCONTROL=erasedups
Prompt_COMMAND='history -w'

次に、~/.bash_logoutに追加する必要があります。

history -a
history -w
0
Steven Penny