Tidak dapat menambah panjang histori shell bash Mac OSX

26

Saya mengatur ~ / .bash_profile beberapa waktu lalu untuk memiliki panjang lebih dari 500 baris tetapi tampaknya sistem tidak dapat menangkap ini.

Apa kamu tahu kenapa?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500
biotek
sumber

Jawaban:

34

Anda juga perlu mengatur HISTSIZE=10000000.

HISTFILESIZEmenentukan jumlah baris untuk disimpan dalam file histori sementara HISTSIZEmenentukan jumlah baris untuk disimpan dalam memori. Keduanya standar untuk500

Jalankan echo $HISTFILESIZE $HISTSIZEsebelum Anda melakukan perubahan dan kemudian lagi setelah. Anda harus melihat 10000000 500dulu lalu 10000000 10000000setelah.

Allan
sumber
15

Anda perlu mengekspor HISTSIZE dan HISTFILESIZEvariabel lingkungan dalam ~/.bash_profilefile Anda .

Tambahkan baris berikut di ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000
Petr Javorik
sumber
8

Menjawab:

Yang perlu Anda lakukan adalah mengatur HISTSIZEdi profil bash Anda ( ~/.bash_profile). Anda dapat membiarkannya HISTFILESIZE tidak disetel . Ini akan mengkonfigurasi baik dalam memori sejarah dan sejarah file berbasis.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Penjelasan, informasi tambahan.

Masalahnya adalah HISTFILESIZE hanya menetapkan riwayat maksimum yang disimpan ke file ketika Anda memulai sesi. HISTSIZE adalah yang menentukan berapa banyak baris yang disimpan pada akhir sesi. Jika HISTFILESIZE lebih besar dari HISTSIZE Anda, Anda tidak akan pernah melihat lebih dari HISTSIZE Anda karena file ditimpa dengan perintah HISTSIZE ( kecuali jika Anda menetapkan histori untuk ditambahkan, tetapi itu adalah topik terpisah: cari histappenddi shell builtin untuk itu) .

Ini adalah alasan mengapa Anda melihat tidak ada efek Dengan HISTSIZE secara default (mungkin 500) file histori Anda selalu ditimpa oleh perintah $ HISTSIZE terbaru. Apa pun yang lebih tua (yang berpotensi menumbuhkan daftar melewati $ HISTSIZE) dihapuskan.

Untuk sebagian besar kasus, tidak perlu menetapkan HISTFILESIZE secara independen dari HISTSIZE.

HISTSIZE menentukan berapa banyak baris yang akan ditulis ke file histori. Daftar perintah terpotong saat keluar, sebelum menulis ke file histori, menjaga N baris paling baru. Secara default, daftar ini menimpa file histori.

HISTFILESIZE menentukan seberapa besar file histori (sejalan) dapat. File akan terpotong saat startup, menjaga N baris paling baru. Selain itu, file riwayat berpotensi terpotong setiap kali HISTFILESIZE diatur.

Akhirnya, meskipun tampaknya tidak berdokumen, BASH menetapkan HISTFILESIZE berdasarkan HISTSIZE jika HISTSIZE diatur selama startup. Saya sudah mencoba ini di macOS, dan beberapa varietas Ubuntu, dan perilakunya konsisten. Jika Anda mengatur HISTSIZE dalam file peluncuran ( bukan melalui baris perintah dengan cara apa pun), HISTFILESIZE akan ditetapkan agar sesuai. (Coba sendiri: atur HISTSIZE ke nilai arbitarily besar di .bash_profile, keluar dan mulai terminal baru, lalu echo $HISTSIZE $HISTFILESIZEdan Anda akan menemukan mereka cocok.)

Akibatnya, tidak ada alasan untuk menyentuh HISTFILESIZE kecuali Anda menginginkan nilai yang berbeda, dan kasing yang memiliki nilai yang berbeda jarang terjadi (dan biasanya melibatkan lebih banyak pengaturan penyesuaian riwayat untuk mendapatkan sesuatu yang bermanfaat).

Zim
sumber
Anda benar Zim. Kode sumber Bash menunjukkan bahwa itu hanya akan mengatur HISTFILESIZE menjadi HISTSIZE jika HISTFILESIZE tidak disetel. git.savannah.gnu.org/cgit/bash.git/tree/…
robert