Ada dua variabel yang mengontrol ukuran histori:
HISTFILESIZE Jumlah maksimum baris yang terkandung dalam file histori. Ketika variabel ini diberi nilai, file histori dipotong, jika perlu, mengandung tidak lebih dari jumlah baris dengan menghapus entri tertua. File histori juga dipotong ke ukuran ini setelah menulisnya ketika sebuah shell keluar. Jika nilainya 0, file riwayat dipotong ke ukuran nol. Nilai non-numerik dan nilai numerik kurang dari nol menghambat pemotongan. Shell menetapkan nilai default ke nilai HISTSIZE setelah membaca file startup apa pun.
dan
HISTSIZE Jumlah perintah yang perlu diingat dalam sejarah perintah (lihat SEJARAH di bawah). Jika nilainya 0, perintah tidak disimpan dalam daftar riwayat. Nilai numerik yang kurang dari nol menghasilkan setiap perintah yang disimpan dalam daftar riwayat (tidak ada batasan). Shell menetapkan nilai default ke 500 setelah membaca semua file startup.
Dua variabel ini memungkinkan Anda untuk mengontrol perilaku riwayat Anda. Pada dasarnya, HISTSIZE
adalah jumlah perintah yang disimpan selama sesi Anda saat ini dan HISTFILESIZE
jumlah perintah yang akan diingat di seluruh sesi. Jadi, misalnya:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
Dalam contoh di atas, karena HISTSIZE
diatur ke 10, history
mengembalikan daftar 10 perintah. Namun, jika Anda keluar lalu masuk kembali, history
hanya akan mengembalikan 5 perintah karena HISTFILESIZE
diatur ke 5. Ini karena, setelah Anda keluar dari sesi Anda, HISTFILESIZE
baris riwayat Anda disimpan ke file riwayat Anda ( ~/.bash_history
secara default tetapi dikontrol oleh HISTFILE
). Dengan kata lain, perintah ditambahkan HISTFILE
hingga mencapai $HISTFILESIZE
garis di titik mana, setiap baris berikutnya yang ditambahkan berarti perintah pertama file akan dihapus.
Anda dapat mengatur nilai-nilai variabel ini di ~/.profile
(atau ~/.bash_profile
jika file itu ada). Jangan atur mereka di ~/.bashrc
pertama Anda karena mereka tidak memiliki bisnis yang ditetapkan di sana dan kedua karena itu akan menyebabkan Anda memiliki perilaku yang berbeda dalam shell login vs non-login yang dapat menyebabkan masalah lain .
Variabel berguna lainnya yang memungkinkan Anda menyesuaikan perilaku riwayat Anda adalah:
HISTIGNORE
: Ini memungkinkan Anda untuk mengabaikan perintah umum tertentu yang jarang menarik. Misalnya, Anda dapat mengatur:
export HISTIGNORE="pwd:df:du"
Itu akan menyebabkan perintah apapun yang dimulai dengan pwd
, df
atau du
untuk diabaikan dan tidak disimpan dalam sejarah Anda.
HISTCONTROL
: Yang ini memungkinkan Anda memilih cara kerja histori. Secara pribadi, saya mengaturnya HISTCONTROL=ignoredups
yang menyebabkannya menyimpan perintah yang digandakan hanya sekali. Opsi lainnya adalah ignorespace
mengabaikan perintah yang dimulai dengan spasi, dan erasedups
yang menyebabkan semua baris sebelumnya yang cocok dengan baris saat ini dihapus dari daftar riwayat sebelum baris itu disimpan. ignoreboth
adalah singkatan untuk ignorespace dan ignoredups.
HISTTIMEFORMAT
: Ini memungkinkan Anda untuk mengatur format waktu dari file histori. Lihat jawaban Pandya atau baca man bash
untuk detailnya.
Untuk penyempurnaan lebih lanjut, Anda harus:
The histappend
pesta pilihan. Ini dapat diatur dengan menjalankan shopt -s histappend
atau menambahkan perintah itu ke ~/.bashrc
. Jika opsi ini disetel
daftar riwayat ditambahkan ke file yang dinamai dengan nilai variabel HISTFILE saat shell keluar, alih-alih menimpa file.
Ini sangat berguna karena memungkinkan Anda untuk menggabungkan sejarah sesi yang berbeda (pikirkan terminal yang berbeda misalnya).
The history
perintah memiliki dua pilihan yang berguna:
Anda bisa, misalnya, menambahkan dua perintah ini ke Anda PROMPT_COMMAND
(yang dieksekusi setiap kali shell Anda menampilkan prompt, jadi setiap kali Anda memulai shell baru dan setelah setiap perintah Anda jalankan di dalamnya):
export PROMPT_COMMAND='history -a;history -r;'
Digabungkan, mereka memastikan bahwa setiap terminal baru yang Anda buka akan segera mengimpor sejarah dari setiap sesi shell lainnya. Hasilnya adalah sejarah umum di semua terminal / sesi shell.