web-dev-qa-db-ja.com

履歴コマンドはどのように機能しますか?

ターミナルでコマンドを入力しても、セッションを終了するまで~/.bash_historyファイルに表示されません。

また、~/.bash_historyファイルを手動で編集するとき(たとえば、最後の3つのコマンドを削除する)、historyと入力すると、~/.bash_historyファイルから削除したコマンドが表示されます。セッションを終了して再度ログインすると、それらは消えます。

~/.bash_historyファイルとhistoryコマンドはどのように同期しますか?

7
sys0dm1n

Bashターミナルを開くと、~/.bash_historyのコンテンツが読み込まれ、アクティブなシェルの履歴が(RAMに)構築され、そのシェルで実行されたすべてのコマンドがファイルにではなく、そのシェルにのみ追加されます。

Bashターミナルを閉じると、その履歴が~/.bash_historyファイルに追加されます。


historyのオプション:

history -a # save the active Shell's history to ~/.bash_history (appending)
history -c # clear the active Shell's history
history -d NNN # delete row NNN of the active Shell's history
history -r # reload the active Shell's history from ~/.bash_history (appending)
history -w # save the active Shell's history to ~/.bash_history (overwriting)

~/.bashrcファイルのオプション

この動作を変更して、コマンドの実行後に一時履歴が~/.bash_historyに直接保存されるようにするには、次の行を追加します。

Prompt_COMMAND="history -a"

さらに、コマンドを実行するたびにすべての端末で~/.bash_historyファイルを自動的にロードする場合は、代わりに次の行を追加します。

Prompt_COMMAND="history -a; history -c; history -r"

特定のコマンド(たとえば、Sudoおよびcatで始まるすべてのもの)を保存対象から除外するには、次の行を追加します。

HISTIGNORE="Sudo*:cat*"
9
dessert