これは履歴をロードする実際のコードです (bashhist.c
から) 260行目あたり):
/* Load the history list from the history file. */
void
load_history ()
{
char *hf;
/* Truncate history file for interactive shells which desire it.
Note that the history file is automatically truncated to the
size of HISTSIZE if the user does not explicitly set the size
differently. */
set_if_not ("HISTSIZE", "500");
sv_histsize ("HISTSIZE");
set_if_not ("HISTFILESIZE", get_string_value ("HISTSIZE"));
sv_histsize ("HISTFILESIZE");
/* Read the history in HISTFILE into the history list. */
hf = get_string_value ("HISTFILE");
if (hf && *hf && file_exists (hf))
{
read_history (hf);
using_history ();
history_lines_in_file = where_history ();
}
}
HISTSIZE
の値の場合 そして HISTFILESIZE
設定されている場合、それらが使用されます。
入力/行編集と履歴を実際に処理するライブラリである Readline は 履歴バッファがどれだけ大きくなるかを制限する機能を提供します。しかし、Bash は、少なくとも私が見つけた限りでは、これ以上の値が無視されるという厳しい上限を設けていません。
編集
コメントから readline
まさに犯人でした。私は(かなりばかげて)機能パラメータを見ていました:
inputrc ファイルから読み取ることができる history-size という変数があります。この変数は、履歴リストに保存される履歴エントリの最大数を設定します。ローカルのinputrcファイルで値を確認して、5000に等しいことを確認しました。より大きな値に設定すると、問題が解決しました。
HISTSIZE が最初に設定されたときに履歴が切り捨てられるため、以前に ~/.bashrc で 5000 に設定されている場合、または /etc のシステム全体の bashrc で 、それらをコメントアウトする必要があります。
HISTFILESIZE
の両方を試してください および HISTSIZE
.