Ini adalah kode aktual yang memuat riwayat (dari bashhist.c
sekitar baris 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 ();
}
}
Jika nilai HISTSIZE
dan HISTFILESIZE
ditetapkan, mereka akan digunakan.
Readline, pustaka yang benar-benar menangani pengeditan masukan/baris dan riwayat melakukannya menawarkan fasilitas untuk membatasi seberapa besar buffer sejarah dapat tumbuh. Namun, Bash tidak menempatkan batas yang keras pada hal ini di mana nilai yang lebih besar akan diabaikan, setidaknya yang dapat saya temukan.
Edit
Dari komentar, readline
memang pelakunya. Saya sedang melihat (agak bodoh) pada parameter fungsional:
ada variabel yang disebut history-size yang dapat dibaca dari file inputrc. variabel itu menetapkan jumlah maksimum entri riwayat yang disimpan dalam daftar riwayat. Saya memeriksa nilainya di file inputrc lokal saya untuk menemukannya sama dengan 5000. Menyetelnya ke nilai yang lebih besar memecahkan masalah.
Riwayat Anda terpotong saat pertama kali HISTSIZE disetel, jadi jika disetel ke 5000 lebih awal di ~/.bashrc Anda, atau di bashrc seluruh sistem di /etc , Anda perlu mengomentarinya.
Coba keduanya HISTFILESIZE
dan HISTSIZE
.