C'est le code réel qui charge l'historique (à partir de bashhist.c
vers la ligne 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 ();
}
}
Si les valeurs de HISTSIZE
et HISTFILESIZE
sont définis, ils seront utilisés.
Readline, la bibliothèque qui gère réellement l'édition des entrées/lignes et l'historique fait offrent des installations pour limiter la taille de la mémoire tampon de l'historique. Cependant, Bash ne place pas de plafond strict là-dessus où des valeurs plus grandes seraient ignorées, du moins que j'ai pu trouver.
Modifier
D'après les commentaires, readline
était bien le coupable. Je regardais (un peu bêtement) les paramètres fonctionnels :
il existe une variable appelée history-size qui peut être lue à partir du fichier inputrc. cette variable définit le nombre maximum d'entrées d'historique enregistrées dans la liste d'historique. J'ai vérifié sa valeur dans mon fichier inputrc local pour la trouver égale à 5000. La définir sur une valeur plus grande a résolu le problème.
Votre historique est tronqué la première fois que HISTSIZE est défini, donc s'il est défini sur 5000 plus tôt dans votre ~/.bashrc, ou dans le bashrc à l'échelle du système dans /etc , vous devez les commenter.
Essayez les deux HISTFILESIZE
et HISTSIZE
.