Dies ist der eigentliche Code, der den Verlauf lädt (aus bashhist.c
etwa Zeile 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 ();
}
}
Wenn die Werte von HISTSIZE
und HISTFILESIZE
eingestellt sind, werden sie verwendet.
Readline, die Bibliothek, die tatsächlich die Bearbeitung von Eingaben/Zeilen und den Verlauf handhabt macht bieten Möglichkeiten, um zu begrenzen, wie groß der Verlaufspuffer werden kann. Bash setzt dem jedoch keine harte Obergrenze, bei der größere Werte ignoriert würden, zumindest die ich finden konnte.
Bearbeiten
Aus Kommentaren, readline
war tatsächlich der Übeltäter. Ich habe (ziemlich töricht) auf funktionale Parameter geschaut:
Es gibt eine Variable namens history-size, die aus der inputrc-Datei gelesen werden kann. diese Variable legt die maximale Anzahl der in der Verlaufsliste gespeicherten Verlaufseinträge fest. Ich habe den Wert in meiner lokalen inputrc-Datei überprüft und festgestellt, dass er gleich 5000 ist. Das Festlegen eines größeren Werts löste das Problem.
Ihr Verlauf wird abgeschnitten, wenn HISTSIZE zum ersten Mal gesetzt wird, also wenn er früher in Ihrem ~/.bashrc auf 5000 gesetzt wurde, oder im systemweiten bashrc in /etc , müssen Sie diese auskommentieren.
Versuchen Sie beide HISTFILESIZE
und HISTSIZE
.