環境変数 HISTORYCONTROL を設定することにより、コマンドの履歴の保存方法を制御することができます。
本資料は、ignorespace>入力したコマンドをhistoryの履歴から除外する方法, ignoredups>同一コマンド続けて実行した時にhistoryの履歴が1つだけになる方法 を同時に有効にできる ignorebothを紹介します。
本資料は、bashを使用して動作確認を行いました。
sakura@ubuntu:~$ LANG=C bash --version GNU bash, version 4.2.25(1)-release (i686-pc-linux-gnu) <snip>
ignorespace, ignoredupsについては以下の記事を参照してください。
HISTCONTROLについてmanコマンドを実行してマニュアルを見てみます。
$ man bash
<snip>
HISTCONTROL
A colon-separated list of values controlling how commands are
saved on the history list. If the list of values includes
ignorespace, lines which begin with a space character are not
saved in the history list. A value of ignoredups causes lines
matching the previous history entry to not be saved. A value of
ignoreboth is shorthand for ignorespace and ignoredups. A value
of erasedups causes all previous lines matching the current line
to be removed from the history list before that line is saved.
Any value not in the above list is ignored. If HISTCONTROL is
unset, or does not include a valid value, all lines read by the
shell parser are saved on the history list, subject to the value
of HISTIGNORE. The second and subsequent lines of a multi-line
compound command are not tested, and are added to the history
regardless of the value of HISTCONTROL.
<snip>
上記の出力からわかるように以下のように記されています。
A value of ''ignoreboth'' is shorthand for ''ignorespace'' and ''ignoredups.''
HISTCONTROL=ignorebothを実際に設定し実行した出力例です。
sakura@ubuntu:~$ history -c
sakura@ubuntu:~$ export HISTCONTROL=ignoreboth
sakura@ubuntu:~$ ls -l 合計 0
sakura@ubuntu:~$ ls -l 合計 0
sakura@ubuntu:~$ date 2013年 12月 5日 木曜日 20:28:47 JST
sakura@ubuntu:~$ ls -l 合計 0
sakura@ubuntu:~$ history
1 export HISTCONTROL=ignoreboth
2 ls -l
3 history
sakura@ubuntu:~$
上記の出力結果を説明すると、ls -l コマンドが2回連続実行されているため、一つしか表示されていません。以上、ignorebothによるHISTOCONTROLのignorespace,ignoredupsを一緒に有効にする方法でした。