Jawaban:
Tambahkan ini ke .bashrc
(Linux) atau .bash_profile
(MacOS) Anda:
export HISTFILESIZE=
export HISTSIZE=
Ini dia, sejarah tanpa batas. Saat ini saya punya 27.000 entri :)
Dari man bash
:
Jika
HISTFILESIZE
tidak disetel, tidak ada pemotongan yang dilakukan.
Itu berarti .bash_history
tidak pernah terpotong
Hal yang sama tampaknya berlaku untuk HISTSIZE
, meskipun saya tidak dapat menemukan yang didokumentasikan.
Fitur rapi lain yang akan saya coba adalah ini:
Jika
HISTTIMEFORMAT
variabel disetel, stempel waktu ditulis ke file riwayat, ditandai dengan karakter komentar riwayat, sehingga mereka dapat disimpan di seluruh sesi shell, seperti berikut:
export HISTTIMEFORMAT="%F %T "
Beri tahu saya jika Anda sudah mencobanya ...
gdb
; jika Anda menetapkan HISTSIZE
variabel, variabel itu akan dianggap sebagai 0, sehingga menonaktifkan ukuran histori seluruhnya.
export
, HISTFILESIZE
ada dalam jumlah baris (bukan byte), dan pemotongan file riwayat terjadi ketika Anda mengatur variabelHISTFILESIZE
(dan ketika shell keluar). Jadi jangan atur dua kali dalam file konfigurasi Anda dengan nilai yang berbeda ...
(pengeposan jawaban saya dari https://stackoverflow.com/a/19533853/128597 )
Setelah banyak, iterasi jelek dan kasus tepi aneh selama bertahun-tahun, saya sekarang memiliki bagian ringkas dari .bashrc saya didedikasikan untuk ini.
Pertama, Anda harus berkomentar atau menghapus bagian .bashrc Anda (default untuk Ubuntu). Jika tidak, maka lingkungan tertentu (seperti screen
sesi lari ) masih akan memotong riwayat Anda:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Kedua, tambahkan ini ke bagian bawah .bashrc Anda:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
Catatan: setiap perintah ditulis segera setelah dijalankan, jadi jika Anda secara tidak sengaja menempelkan kata sandi, Anda tidak bisa hanya "membunuh -9 %%" untuk menghindari penulisan riwayat, Anda harus menghapusnya secara manual.
Perhatikan juga bahwa setiap sesi bash akan memuat file histori lengkap dalam memori, tetapi bahkan jika file histori Anda tumbuh hingga 10MB (yang akan memakan waktu yang sangat lama ) Anda tidak akan melihat banyak efek pada waktu startup bash Anda.
HISTFILESIZE
, ini sebabnya Anda harus menghapus kejadian seperti itu kecuali yang Anda inginkan. Ini juga akan terpotong pada shell exit (tapi itu diharapkan). Dan Anda seharusnya tidak perlu export
.
bash --norc
akan memotong sejarah lagi.
export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
untuk menjaga riwayat shell terpisah per sesi (berdasarkan nama host dan nama tty). Tentu saja saya harus membuat direktori ~ / hist terlebih dahulu.
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
Sertakan dalam ~ / .bashrc :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
Jawaban ini memenuhi kriteria berikut:
riwayat master terpisah (tidak ada sesi yang dapat mengganggu riwayat Anda)
penulisan riwayat otomatis (tidak ada tombol cepat)
tulisan jarang (tidak ada penambahan setelah setiap perintah)
Pada startup interaktif, jika $HISTFILESIZE
diatur ke angka, bash memotong $HISTFILE
ke nomor itu. Pada penutupan interaktif, jika opsi shell histappend
diset, bash menambahkan $HISTSIZE
baris $HISTFILE
, jika tidak maka akan ditimpa $HISTFILE
.
Setiap kali sebuah tab dibuat di Terminal, ~/.bash_profile
dibaca, yang berarti bash tidak melanjutkan untuk membaca Anda ~/.bashrc
. Tambahkan baris berikut ke Anda ~/etc/bash_profile
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
Jika Anda menggunakan layar, file konfigurasi Anda adalah ~ / .screenrc. Jika Anda ingin layar merekam riwayat, Anda hanya perlu mengaturnya untuk menggunakan shell login yang akan sumber file startup bash Anda (dan merekam riwayat Anda).
# use bash, make it a login shell
defshell -bash
Konsep yang berbeda (mungkin tidak dapat diterapkan) tetapi Anda dapat memiliki unlimited
riwayat saat menggunakan shell-sink .