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


108

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


私は、関連する質問を作成しました:askubuntu.com/questions/205520/...を。履歴の重複は、コマンドのコンテキストを確認するのに役立ちます。履歴を印刷するときに、DUPを省略したいことがあります。
-Justingordon

回答:


123

bashmanページから:

ヒストコントロール

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

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

export HISTCONTROL=ignoreboth:erasedups


〜/ .bashrcの下部にHISTCONTROL = ignorebothを追加しますか?
karthick87

1
@karthickそれをどこに置いても構いませんが、下は大丈夫です。
イザヤ

Ubuntu 12.04のインストールで~/.bash_loginは、.bashrcが変更された場合に動作する場合がほとんどでしたが、常にそうなるとは限りませんでした。
ck-

3
bashプロファイル/ rcファイルを更新した後、これらを実行することを忘れないでくださいsource ~/.bashrc && source ~/.bash_profile
エリックキガティ

23

これにあなたのスティック~/.bashrc

export HISTCONTROL=ignoredups

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

私が好むignoredups、私はウェブサイトをoffコマンドをコピーしたときに、私は非常に迷惑フロントのスペースでコマンドを無視するデフォルトの動作を見つけると自分自身で、私は誤ってあまりにもスペースにコピーされたので、それは保存されません....しかしへそれぞれ独自の。


3
まだ重複しています。何が問題なのでしょうか?imgur.com/fXeLQ.png
karthick87

5
別の回答から引用された@ karthick87:値がの場合ignoredups、前の履歴エントリに一致する行は保存されません。連続する同一行のみを削除します。
-AL

10

これ~/.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」設定は、セッション全体で共通の履歴と競合します


なぜ彼の使用export HISTCONTROLとあなたの使用はしないのですか?違いは何ですか?エクスポートせずに私のために働いている、私はちょうど興味がある
-felwithe

1
良い質問!答えも知りたいです。一般exportに、変数をサブプロセスで使用できるようにします。stackoverflow.com/q/1158091/552621の場合HISTCONTROLPROMPT_COMMANDなど、これらの変数はので、多分(子プロセスに)それらを輸出する必要はありませんシェル自体によって使用されています。
ヌールウルフ


3

に次を追加します~/.bashrc

export HISTCONTROL=ignoredups

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

nano ~/.bashrc

0

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

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

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

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