Apakah ada cara untuk mendefinisikan riwayat tanpa batas di Bash?
83
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 menetapkanHISTSIZE
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:Kedua, tambahkan ini ke bagian bawah .bashrc Anda:
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.
sumber
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 perluexport
.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 :
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)
Latar Belakang
Pada startup interaktif, jika
$HISTFILESIZE
diatur ke angka, bash memotong$HISTFILE
ke nomor itu. Pada penutupan interaktif, jika opsi shellhistappend
diset, bash menambahkan$HISTSIZE
baris$HISTFILE
, jika tidak maka akan ditimpa$HISTFILE
.tips untuk OSX (Terminal)
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
:tips untuk layar
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).
sumber
Konsep yang berbeda (mungkin tidak dapat diterapkan) tetapi Anda dapat memiliki
unlimited
riwayat saat menggunakan shell-sink .sumber