Bashで無制限の履歴を定義する方法はありますか?
これを.bashrc
(Linux)または.bash_profile
(MacOS)に追加します。
export HISTFILESIZE=
export HISTSIZE=
無制限の歴史があります。現在、27000のエントリがあります。
man bash
から:
HISTFILESIZE
が設定されていない場合、切り捨ては実行されません。
つまり、.bash_history
は切り捨てられません
同じことがHISTSIZE
にも当てはまるようですが、ドキュメントには記載されていません。
私が試してみるもう1つのきちんとした機能は次のとおりです。
HISTTIMEFORMAT
変数が設定されている場合、タイムスタンプは履歴ファイルに書き込まれ、履歴コメント文字でマークされます。これにより、次のように、シェルセッション全体でタイムスタンプを保持できます。
export HISTTIMEFORMAT="%F %T "
既にお試しになったことがあればお知らせください...
( https://stackoverflow.com/a/19533853/128597 から私の回答を再投稿)
長年にわたる多くの醜いイテレーションと奇妙なEdgeケースの後、これに専用の my .bashrc の簡潔なセクションがあります。
まず、コメントアウトするか、.bashrcのこのセクションを削除する必要があります(Ubuntuのデフォルト)。そうしないと、特定の環境(screen
セッションの実行など)で履歴が切り捨てられます。
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
次に、これを追加します.bashrcの末尾に:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force Prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
Prompt_COMMAND="history -a; $Prompt_COMMAND"
注:すべてのコマンドは実行直後に書き込まれるため、誤ってパスワードを貼り付けた場合、履歴の書き込みを回避するために「kill -9 %%」することはできません。手動で削除する必要があります。
また、各bashセッションは完全な履歴ファイルをメモリにロードしますが、履歴ファイルが10MBに達しても(長く、長い時間かかります) bashの起動時間への影響の多くに注意してください。
〜/ .bashrcに含める:
# append a session's history on Shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
この回答は次の基準を満たしています。
別個のマスター履歴(セッションが履歴を中断することはありません)
自動履歴書き込み(ホットキーなし)
まれな書き込み(各コマンドの後に追加しない)
インタラクティブな起動時に、$HISTFILESIZE
が数値に設定されている場合、bashは$HISTFILE
をその数値に切り捨てます。インタラクティブクローズで、シェルオプションhistappend
が設定されている場合、bashは$HISTSIZE
行を$HISTFILE
に追加します。それ以外の場合は、$HISTFILE
を上書きします。
ターミナルでタブが作成されるたびに、~/.bash_profile
が読み取られます。これは、bashが~/.bashrc
を読み取らないことを意味します。次の行を~/etc/bash_profile
に追加します。
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
Screenを使用する場合、構成ファイルは〜/ .screenrcです。画面に履歴を記録させたい場合は、bashスタートアップファイルをソースする(そして履歴を記録する)ログインシェルを使用するように設定するだけです。
# use bash, make it a login Shell
defshell -bash
異なる概念(適用されない場合があります)ですが、 Shell-sink を使用すると、unlimited
履歴を保持できます。