Questo è il codice effettivo che carica la cronologia (da bashhist.c
intorno alla riga 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 ();
}
}
Se i valori di HISTSIZE
e HISTFILESIZE
sono impostati, verranno utilizzati.
Readline, la libreria che attualmente gestisce l'input/l'editing di riga e la cronologia lo fa offrire servizi per mettere un limite a quanto può crescere il buffer storico. Tuttavia, Bash non pone un tetto rigido su questo dove i valori più grandi verrebbero ignorati, almeno quello che sono riuscito a trovare.
Modifica
Dai commenti, readline
era davvero il colpevole. Stavo guardando (piuttosto stupidamente) i parametri funzionali:
c'è una variabile chiamata history-size che può essere letta dal file inputrc. quella variabile imposta il numero massimo di voci della cronologia salvate nell'elenco della cronologia. Ho controllato il suo valore nel mio file inputrc locale per trovarlo uguale a 5000. L'impostazione su un valore maggiore ha risolto il problema.
La tua cronologia viene troncata la prima volta che viene impostato HISTSIZE, quindi se è stato impostato su 5000 in precedenza nel tuo ~/.bashrc, o nel bashrc a livello di sistema in /etc , devi commentarli.
Prova entrambi HISTFILESIZE
e HISTSIZE
.