Docker toolbox の QuickStart でシェルを立ち上げると、ものすごい量の history が溜まって邪魔だったので対策しました。
設定でできること
HISTCONTROL
HISTCONTROL 環境変数をセットしておくと、空白から始まるコマンドや重複するコマンドを履歴に残さないようにできます。
- ignoredups
直前と同じコマンドの場合は保存しない
| command | history |
ls
ls | ls |
ls
ls -a
ls | ls
ls -a
ls |
- ignorespace
空白から始まるコマンドは保存しない
| command | history |
ls
ls | ls |
ls
ls -a
ls | ls
ls -a
ls |
- ignoreboth
ignoredups + ignorespace
- erasedups
重複するコマンドは最新のものだけが保存される
(履歴にある重複コマンドは削除される)
自分は以下のようにしました。
export HISTCONTROL=ignoreboth
HISTIGNORE
HISTIGNORE に履歴に残したくないコマンドを列挙できます。
コマンドとコマンドの区切り文字は ':' です。
自分は以下のようにしました。
export HISTIGNORE=history:echo:'#*'
設定だけでは限界がある・・
上記の設定をしても、すこしだけ残ってほしくない履歴が減るくらいです。
自分でコマンド打つときにも便利な設定なので、しておいて損はないですが、当初の目的はこれだけでは達成できません。
というわけで、次に続きます。
start.sh を書き換える
できれば外部から非侵入的に解決したかったのですが、自分の知識ではここまでが限界でした。
Docker Toolbox のインストールディレクトリ「C:\Program Files\Docker Toolbox」に start.sh があります。
ショートカットはこちらの .sh を呼び出しており、こちらを少し書き換えることで対策しました。
ファイルの先頭で set +o history をして履歴を無効にします。
※ここで set コマンドの前に1つスペースを上げていることに注意。最初の設定で空白で始まるコマンドを履歴に残さないようにしたので
set +o history
#!/bin/bash
set +o history
そして、ファイルの末尾あたりで set -o history で履歴を有効にします。
bash の呼び出しあたりは先頭空白を入れて、HISTCONTROL による抑制が効くようにしました。
set -o history
if [ $# -eq 0 ]; then
echo "Start interactive shell"
exec "$BASH" --login -i
else
echo "Start shell with command"
exec "$BASH" -c "$*"
fi
最後に
これで設定は以上です。
きれいになりました。