bashのHISTCONTROL、ignoredups/ignorespace/ignoreboothの違い

  • Bash
  • Shell
  • Linux

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

bashのHISTCONTROLまわりを整理したのでメモ。

HISTCONTROLに設定できる値

値 挙動
ignoredups 直前のコマンドと同一の場合のみ履歴に記録しない
ignorespace 行頭にスペースを入れて実行したコマンドを履歴に記録しない
ignoreboth 上記2つを組み合わせたもの

ignorebothはignorespace:ignoredupsと書くのと同じ。HISTCONTROLはコロン区切りで複数値を持てるので、ignorebothはそのショートカットという位置づけ。

設定方法

~/.bashrcあたりに書く。

ターミナル
export HISTCONTROL=ignoreboth

ignoredupsの注意点

ignoredupsは「直前のコマンドと同じ」場合にしか効かない。履歴全体から重複コマンドを除去するわけではないので、

ls
cd /tmp
ls

のように間に別のコマンドが挟まると、lsは2回とも記録される。履歴全体の重複を消したいなら別の仕組み(history | sort | uniq的なポストプロセス)が要る。

近いオプション: HISTIGNORE

特定のコマンド自体を履歴から除外したい場合はHISTIGNOREを使う。

ターミナル
export HISTIGNORE="ls:cd:pwd:exit"

こちらはコマンド名のパターンマッチで除外する仕組みなので、HISTCONTROLとは役割が違う(HISTCONTROLは記録条件、HISTIGNOREは記録対象そのものの除外)。