Untuk memahami perilaku riwayat bash, Anda harus mengetahui hal berikut:
- Ada riwayat di file riwayat.
- Ada sejarah dalam memori proses bash.
- Riwayat di memori satu proses bash tidak disinkronkan dengan riwayat di memori proses bash lainnya.
- Riwayat dalam memori proses bash tidak disinkronkan dengan riwayat dalam file, kecuali diminta secara eksplisit ke atau selama beberapa peristiwa tertentu (lihat di bawah).
Menggunakan pengaturan default, siklus hidup dari sesi bash berkaitan dengan sejarah adalah sebagai berikut:
- Selama startup bash akan membaca file histori. Konten file histori sekarang ada di memori proses bash.
- Selama penggunaan normal hanya riwayat dalam memori yang dimanipulasi.
- Selama pematian histori dalam memori ditulis ke file histori, menimpa konten sebelumnya dari arsip histori.
Perilaku yang tampaknya tidak deterministik yang telah Anda amati sebagian besar karena isi dari file histori selalu sejarah dari sesi bash terakhir yang ditutup, dan bash hanya membaca file histori selama startup.
Baca manual bash untuk penjelasan lebih rinci tentang proses startup dan shutdown.
Perhatikan bahwa dengan pengaturan default yang saya maksud adalah pengaturan default dari bash. Distribusi Anda mungkin telah menyediakan .bashrc
(atau /etc/bash.bashrc
) yang mengubah perilaku ini.
Dengan mengaktifkan opsi shell, histappend
Anda dapat memberi tahu bash untuk menambahkan alih-alih menimpa file histori. Anda dapat mengaktifkan histappend
menggunakan perintah shopt -s histappend
. Agar opsi ini selalu diaktifkan, Anda harus meletakkan perintah di .bashrc
(atau file inisialisasi lainnya). Baca lebih lanjut tentang shopt
perintah di manual bash
Perhatikan bahwa mengaktifkan histappend
tidak akan banyak mengurangi perilaku yang tampaknya tidak deterministik. Ini karena setiap sesi bash masih memiliki riwayatnya sendiri di memori. Dimungkinkan untuk memiliki sebagian besar riwayat pesta yang disinkronkan. Ada panduan bagaimana agar setiap proses bash memiliki sebagian besar riwayat yang disinkronkan di utas pada stack overflow .
menggunakan perintah builtin history
Anda dapat secara eksplisit memberitahu bash untuk membaca histori dari file ke memori, atau menulis dari memori ke file. Misalnya: history -r
akan membaca konten file dan menambahkannya ke riwayat di memori. history -w
akan menulis riwayat saat ini dari memori ke file, menimpa konten sebelumnya. Ini pada dasarnya apa yang terjadi selama shutdown. Baca lebih lanjut tentang history
perintah di manual bash
Untuk kelengkapan di sini adalah daftar variabel internal yang mengubah perilaku riwayat:
HISTFILE
: file untuk membaca dan menulis sejarah.
HISTFILESIZE
: jumlah baris maksimum untuk file histori.
HISTSIZE
: jumlah baris maksimum untuk riwayat dalam memori.
HISTCONTROL
, HISTIGNORE
, HISTTIMEFORMAT
: Tidak relevan untuk diskusi ini. Baca manual bash untuk detailnya.