綾小路龍之介の素人思考

[bash] 2回連続の同一コマンドの場合に2回目をヒストリに登録しない方法

.bash_history に重複したコマンドを記録させないようにするというのは嘘で2回同じコマンドを入力した場合にのみ2回目のコマンドをヒストリに登録しないようにする。注意したい点は、重複するコマンドをヒストリに登録しない、のではなく、続いて2回同じコマンドが入力された場合は2回目のコマンドをヒストリに登録しない、ということだ。つまり下のようにコマンドを打つと、全てがコマンドヒストリに登録される。

$ ls
$ cd hoge
$ ls

これに対して次のようにした場合ははじめのコマンドのみがコマンドヒストリに登録される。

$ ls
$ ls
$ ls

つまり、比較対象は1つ前のコマンドのみということだ。下のようにすれば、入力したコマンドと一つ前のコマンドとを比較して、同じなら記録せず、異なっていれば記録する。ということになる。

$ echo export HISTCONTROL=ignoredups >> ~/.bashrc

比較は一つ前のコマンドについてのみなされるということは、すでに登録されたものに対してはされないということだ。

たとえば ~/.bash_history にある重複行を削除したいときは下のようにすればいい。

$ perl -lne 'push @a,$_; END{ @s=grep(!$t{$_}++,@a); print map{"$_\n"}@s}' ~/.bash_history

こうすれば、 ~/.bash_history に登録されている順番を崩さずに重複行のみを削除できる。下のようにしてもよいが、

$ sort ~/.bash_history | uniq

この場合は順番が崩れる。~./bash_history の重複行を削除するということに意味があるかは判らない。なぜなら、入力したコマンドはその順番も含めて意味のあるものだと思うから。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2006-05-10T12:30:11+09:00
  2. Modified: 2006-05-10T08:33:25+09:00
  3. Generated: 2017-09-02T23:09:16+09:00