LoginSignup
7
7

More than 3 years have passed since last update.

Bashのhistoryで表示される重複したコマンドを消したい

Posted at

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 現在の行と一致する履歴を保存前にすべて削除する

ignoredupserasedupsは似ているように思えますが、

  • 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

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7