Solusi 1:
Untuk memahami perilaku riwayat bash terlebih dahulu, Anda harus mengetahui hal berikut:
- Ada riwayat di file riwayat.
- Ada riwayat dalam memori proses bash.
- Riwayat dalam memori satu proses bash tidak disinkronkan dengan riwayat dalam memori proses bash lainnya.
- Riwayat dalam memori proses bash tidak disinkronkan dengan riwayat dalam file, kecuali diminta secara eksplisit ke atau selama peristiwa tertentu (lihat di bawah).
Menggunakan pengaturan default, siklus hidup sesi bash sehubungan dengan riwayatnya adalah sebagai berikut:
- Selama startup, bash akan membaca file histori. Konten file histori sekarang ada di memori proses bash.
- Selama penggunaan normal, hanya histori dalam memori yang dimanipulasi.
- Selama penonaktifan, riwayat dalam memori ditulis ke file riwayat, menimpa konten sebelumnya dari file riwayat.
Perilaku yang tampaknya nondeterministik yang Anda amati sebagian besar karena konten file riwayat selalu merupakan riwayat sesi bash terakhir yang ditutup, dan bash hanya membaca file riwayat selama startup.
Baca manual bash untuk penjelasan lebih detail tentang proses startup dan shutdown.
Perhatikan bahwa dengan pengaturan default yang saya maksud adalah pengaturan default dari bash. Distribusi Anda mungkin 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 riwayat. Anda dapat mengaktifkan histappend
menggunakan perintah shopt -s histappend
. Agar opsi ini selalu diaktifkan, Anda harus meletakkan perintah di .bashrc
Anda (atau file inisialisasi lainnya). Baca selengkapnya tentang shopt
perintah dalam bash manual
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 riwayat bash yang sebagian besar tersinkronisasi. Ada panduan cara membuat setiap proses bash memiliki sebagian besar riwayat yang disinkronkan di utas pada stack overflow.
menggunakan perintah bawaan history
Anda dapat secara eksplisit memberi tahu bash untuk membaca riwayat 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 adalah apa yang terjadi selama shutdown. Baca selengkapnya tentang history
perintah dalam bash manual
Untuk kelengkapan, berikut adalah daftar variabel internal yang mengubah perilaku histori:
HISTFILE
:file untuk membaca dan menulis sejarah.HISTFILESIZE
:jumlah baris maksimum untuk file riwayat.HISTSIZE
:jumlah baris maksimum untuk riwayat di memori.HISTCONTROL
,HISTIGNORE
,HISTTIMEFORMAT
:tidak relevan untuk diskusi ini. Baca manual bash untuk detailnya.
Solusi 2:
http://www.gnu.org/software/bash/manual/bashref.html#Using-History-Interactively
Anda mungkin dapat memanipulasi bagaimana file riwayat ditulis dengan salah satu terminal, yaitu, jalankan "history -a" atau "history -w" di terminal yang ingin Anda simpan riwayatnya, lalu "history -r" di terminal lainnya. Tergantung pada apa yang ingin Anda lakukan.