2019年10月16日水曜日

Docker toolbox QuickStart ショートカットを起動したときに history にゴミが溜まるのを抑制する

Docker toolbox の QuickStart でシェルを立ち上げると、ものすごい量の history が溜まって邪魔だったので対策しました。





設定でできること
HISTCONTROL
HISTCONTROL 環境変数をセットしておくと、空白から始まるコマンドや重複するコマンドを履歴に残さないようにできます。

  • ignoredups
    直前と同じコマンドの場合は保存しない
    commandhistory
    ls
    ls
    ls
    ls
    ls -a
    ls
    ls
    ls -a
    ls
  • ignorespace
    空白から始まるコマンドは保存しない
    commandhistory
    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


最後に
これで設定は以上です。
きれいになりました。

0 件のコメント:

コメントを投稿