GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana caranya:Riwayat Bash/Shell yang tidak terbatas?

Tambahkan ini ke .bashrc Anda (Linux) atau .bash_profile (MacOS):

export HISTFILESIZE=
export HISTSIZE=

Ini dia, sejarah tanpa batas. Saat ini saya memiliki 27000 entri :)

Dari man bash :

Jika HISTFILESIZE tidak disetel, tidak ada pemotongan yang dilakukan.

Artinya .bash_history tidak pernah terpotong

Hal yang sama juga berlaku untuk HISTSIZE , meskipun saya tidak dapat menemukan itu didokumentasikan.

Fitur keren lainnya yang akan saya coba adalah ini:

Jika HISTTIMEFORMAT variabel disetel, stempel waktu ditulis ke file riwayat, ditandai dengan karakter komentar riwayat, sehingga dapat dipertahankan di seluruh sesi shell, seperti berikut:

export HISTTIMEFORMAT="%F %T "

Beri tahu saya jika Anda sudah mencobanya...


(memposting ulang jawaban saya dari https://stackoverflow.com/a/19533853/128597)

Setelah banyak pengulangan yang besar dan buruk serta kasus tepi yang aneh selama bertahun-tahun, sekarang saya memiliki bagian ringkas dari .bashrc saya yang dikhususkan untuk ini.

Pertama, Anda harus memberi komentar atau menghapus bagian ini dari .bashrc Anda (default untuk Ubuntu). Jika tidak, maka lingkungan tertentu (seperti menjalankan screen sesi) 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 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 riwayat lengkap di memori, tetapi meskipun file riwayat Anda bertambah hingga 10MB (yang akan memakan waktu lama, lama waktu) Anda tidak akan melihat banyak efek pada waktu startup bash Anda.


Sertakan dalam ~/.bashrc :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

Jawaban ini memenuhi kriteria berikut:

  1. riwayat master terpisah (tidak ada sesi yang dapat mengganggu riwayat Anda)

  2. penulisan riwayat otomatis (tanpa hotkey)

  3. penulisan yang jarang (tidak menambahkan setelah setiap perintah)

latar belakang

Pada startup interaktif, jika $HISTFILESIZE diatur ke angka, bash memotong $HISTFILE ke nomor itu. Pada penutupan interaktif, jika opsi shell histappend diatur, bash menambahkan $HISTSIZE baris ke $HISTFILE , jika tidak akan menimpa $HISTFILE .

kiat untuk OSX (Terminal)

Setiap kali tab dibuat di Terminal, ~/.bash_profile dibaca, yang berarti bash tidak melanjutkan membaca ~/.bashrc Anda . Tambahkan baris berikut ke ~/etc/bash_profile Anda :

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

tips untuk layar

Jika Anda menggunakan screen, file konfigurasi Anda adalah ~/.screenrc. Jika Anda ingin layar merekam riwayat, Anda hanya perlu menyetelnya untuk menggunakan shell login yang akan menjadi sumber file startup bash Anda (dan merekam riwayat Anda).

# use bash, make it a login shell
defshell -bash

Linux
  1. Cara menggunakan perintah riwayat Bash

  2. Cara Menghapus Riwayat Baris Perintah BASH di Linux

  3. Cara menonaktifkan pengeditan riwayat saya di bash

  1. Cara Menghapus Riwayat Bash di Linux

  2. Bagaimana Bash Tahu Bagaimana Itu Dipanggil?

  3. Bagaimana Agar Type-ahead Terapkan Ke Bash History Search (ctrl-r)?

  1. Sejarah Hancur?

  2. Bagaimana Cara Mengubah Cron Shell (sh ke Bash)?

  3. Bagaimana Membandingkan String di Bash Shell Scripting