history で重複したコマンドを消したい
historyを叩いた
入力したコマンドを確認したくてhistory
コマンドを入力すること、ありますよね。
$ history
...
2000 ll
2001 cd ./hoge
2002 ls
2003 ll
2004 cd ../
2005 history
2006 ll
2007 cd ~
2008 ls
2009 history
...
「いやllとかls多いな?」
重複したコマンドの消し方
重複したコマンドを消去するには.bashrc に
HISTCONTROL=erasedups
を追記すればよいです。
$ source .bashrc
で.bashrcを再度読み込めば設定が反映されます。
HISTCONTROLとは
入力したコマンドがどのように保存されるか決定する値。
http://www.gnu.org/software/bash/manual/bash.html#index-HISTCONTROL
HISTCONTROL=value
value | 設定内容 |
---|---|
ignorespace | 空白文字で始まる行を保存しない |
ignoredups | ひとつ前の履歴エントリと一致する行を保存しない |
ignoreboth | ignorespace と ignoredups の省略形 |
erasedups | 現在の行と一致する履歴を保存前にすべて削除する |
ignoredups
とerasedups
は似ているように思えますが、
-
ignoredups
は直前に入力したコマンドと同一のコマンドを入力した場合、そのコマンドを保存しない設定 -
erasedups
は入力したコマンドと同一のコマンドが履歴に存在した場合、昔の履歴を削除する設定
という違いがあります。
注意点
erasedups
を設定すると、昔の履歴も消去するので、コマンド履歴が時系列順に並ばなくなります。
コマンド履歴が時系列順に並んでいることを期待する場合は使わないほうがよさそう。
lsとかcdだけ保存しないようにできないの?
そういった細かい設定をしたい場合は、HISTIGNOREを使えば良いようです。
この記事では割愛します。
http://www.gnu.org/software/bash/manual/bash.html#index-HISTIGNORE
参考
http://www.gnu.org/software/bash/manual/bash.html#Bash-Variables
https://qiita.com/bezeklik/items/56a597acc2eb568860d7