Toto je skutečný kód, který načte historii (od bashhist.c
kolem řádku 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 ();
}
}
Pokud jsou hodnoty HISTSIZE
a HISTFILESIZE
jsou nastaveny, budou použity.
Readline, knihovna, která ve skutečnosti zpracovává vstup / editaci řádku a historii, dělá nabídnout zařízení, která omezí, jak velká může vyrovnávací paměť historie narůst. Bash tomu však neklade pevný strop, kde by byly ignorovány větší hodnoty, alespoň to jsem našel.
Upravit
Z komentářů, readline
byl skutečně viníkem. Díval jsem se (spíše bláhově) na funkční parametry:
existuje proměnná s názvem history-size, kterou lze číst ze souboru inputrc. tato proměnná nastavuje maximální počet záznamů historie uložených v seznamu historie. Zkontroloval jsem její hodnotu v místním souboru inputrc a zjistil jsem, že se rovná 5000. Nastavením na vyšší hodnotu se problém vyřešil.
Vaše historie je při prvním nastavení HISTSIZE zkrácena, takže pokud je nastavena na 5000 dříve ve vašem ~/.bashrc, nebo v systémovém bashrc v /etc , musíte je okomentovat.
Zkuste obě HISTFILESIZE
a HISTSIZE
.