URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

bashのコマンド履歴についてのメモ

 自分が一番使う機会の多いシェルは"bash"です。
 "bash"はユーザーが過去に実行したコマンドを記録しています。
 なので"history"コマンドで履歴を表示したり、[↑]キーとかで過去のコマンドを選んで再実行できます。

 しかし、ごく希に履歴を残さないように作業をしたいときもあったりします(悪いことをするわけではないです)。
 そういうときのメモです。

コマンド履歴の仕組みとか挙動について簡単におさらい

  • ログインして"bash"が起動すると、その中で実行したコマンドの履歴はキャッシュされる。
  • ログオフなどで"bash"が終了すると、キャッシュから".bash_history"ファイルにコマンド履歴が書き出されて保存される。
  • "history"コマンドはキャッシュと".bash_history"ファイルの内容が表示される。
  • ログオン直後でキャッシュがない場合に"history"コマンドを実行すると、".bash_history"の内容と直前に実行した"history"が表示される。

現在のコマンド履歴キャッシュを削除する

# history -c

 ".bash_history"の内容は削除されない。".bash_history"の内容を削除する場合は、エディタ等で直接ファイルの中身を消せばいい

コマンド履歴に関係する環境変数

HISTIGNORE指定したコマンドが履歴に記録されなくなる
"*"を指定すると全てのコマンドが記録されなくなる
HISTCONTROL必要に応じて以下の値のいずれかを指定する
ignoredups … 直前に実行したコマンドと同じ場合は記録しない
ignorespace … コマンドの前にスペースを入力すると履歴に記録しない
ignoreboth … "ignoredups"と"ignorespace"の両方の効果
erasedups … 履歴に同じコマンドがある場合は記録しない(直前でなくてもよい)

コマンド履歴を残さずに作業をする(本題)

# HISTIGNORE=*; history -d $(history | awk '{a=$1;}END{print a;}')

<実行したいコマンド>

# unset HISTIGNORE

 作業開始時の"HISTIGNORE ~"や最後の"unset ~"も含めて実行したコマンドが履歴に記録されない(当然、"unset ~"の後からは記録されるようになる)。