回答:
これを.bashrc
(Linux)または.bash_profile
(MacOS)に追加します。
export HISTFILESIZE=
export HISTSIZE=
そこに行く、無制限の歴史。現在、27000のエントリがあります:)
からman bash
:
HISTFILESIZE
が設定されていない場合、切り捨ては実行されません。
つまり、.bash_history
切り捨てられることはありません
同じことがHISTSIZE
にも当てはまるようですが、文書化されたものは見つかりませんでした。
私が試したいもう一つのきちんとした機能はこれです:
HISTTIMEFORMAT
変数が設定されている場合、タイムスタンプは履歴コメント文字でマークされた履歴ファイルに書き込まれるため、次のようにシェルセッション間で保持されます。
export HISTTIMEFORMAT="%F %T "
既に試したことがある場合はお知らせください...
gdb
; HISTSIZE
変数を設定すると、0として取得されるため、履歴サイズが完全に無効になります。
export
、変数を設定すると(およびシェルが終了すると)HISTFILESIZE
履歴ファイルの切り捨てが発生します HISTFILESIZE
。したがって、設定ファイルで異なる値を2回設定しないでください
(https://stackoverflow.com/a/19533853/128597から私の答えを再投稿します)
長年にわたる多くの大規模でiterationいイテレーションと奇妙なエッジケースの後、これに専用の.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の起動時間に大きな影響はありません。
HISTFILESIZE
、履歴ファイルが切り捨てられます。このため、必要なイベント以外のイベントの発生を削除する必要があります。また、シェルの終了時に切り捨てられます(ただし、これは予期されています)。そして、あなたは必要はありませんexport
。
bash --norc
行うと、履歴が再度切り捨てられます。
export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
セッションごとに(ホスト名とtty名に基づいて)シェル履歴を保持するために使用します。もちろん、最初に〜/ histディレクトリを作成する必要があります。
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
〜/ .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
に読み込まれます~/.bashrc
。つまり、bashはを読み続けません。に次の行を追加します~/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-sinkunlimited
を使用するときに履歴を持つことができます。