Saya suka menyimpan banyak sejarah, jadi saya telah histappend
menetapkan di .bashrc
. Sebagian besar waktu semuanya bekerja dengan baik, dengan sejarah dibangun dari banyak cangkang yang ditambahkan. Namun, setiap sesekali, saya akan memulai shell baru dan menemukan bahwa saya telah kehilangan seluruh sejarah - dan sering hanya berisi beberapa perintah dari shell terakhir untuk keluar (yaitu itu bukan hanya menimpa bukan menambahkan ). Karena itu, saya curiga ini terjadi di shell exit, daripada dari proses lain yang membunuh .bash_history
file. Mendukung kesimpulan ini, saya memiliki nomor perintah sejarah di prompt saya, dan saya belum pernah melihatnya melompat turun.
Adakah yang pernah mengalami masalah serupa? Atau bahkan hanya punya saran bagaimana melacak masalahnya?
Jawaban:
Maaf untuk menjawab pertanyaan saya sendiri, tetapi tidak ada jawaban lain yang benar-benar mengatasi masalah tersebut.
Saya akhirnya tahu bahwa ini hanya terjadi ketika menutup
gnome-terminal
sendiri (yaitu file> keluar, tombol 'x', alt + F4), dan itupun umumnya hanya ketika menutup beberapa terminal secara berurutan. Itu tidak pernah terjadi ketika menggunakan ctrl-D untuk menutup shell, membiarkan terminal mengikuti.Jika saya bisa menjabarkannya dengan cukup baik, saya akan mengajukan laporan bug gnome-terminal. Sementara itu, mungkin ini akan membantu beberapa orang lain yang datang ke sini dari google!
sumber
Tidak tahu mengapa ini terjadi, tapi mungkin Anda dapat menghindari masalah dengan memaksa bash untuk menulis ke file histori setiap kali menampilkan prompt:
Ini akan menulis (-a) dan kemudian membaca kembali (-n) file histori setiap kali bash meminta perintah berikutnya. Manfaat tambahan: Anda akan mendapatkan perintah X di shell 1 dalam sejarah shell 2.
sumber
history -n
bersisik. Ini lebih dapat diandalkan untuk dilakukanhistory -a; history -c; history -r
. Untuk menjelaskan ini, pertama-tama saya akan mencatat bahwahistory -a
melakukan hal yang benar - Anda.bash_history
akan berisi semua perintah yang Anda ketikkan, dalam urutan yang Anda ketikkan - dengan asumsi bahwa Anda menjalankanhistory -a
setelah setiap perintah. Tantangannya adalah untuk menjaga agar ide shell tentang sejarah tetap sinkron dengan file .bash_history. Ini mudah-c
dan-r
, masalahnya adalah bisa lambat jika besar.-n
dapat pecah karena kesalahan mengidentifikasi baris mana yang baru. (Saya kehabisan ruang di sini!)-n
) Bayangkan Anda menjalankan perintah di shell 1:ls
. Kemudian di shell lain, Shell Two, Anda jalankancd
. Sekarang, sejarah di .bash_history sudah benar karenahistory -a
diPROMPT_COMMAND
- Anda akan berisils \n cd \n
. Selanjutnya, Anda kembali ke shell One dan mengetikpwd
. Shell One berpikir bahwa hanya ada perintah dan sejarah (ls
). Sekarang ia berpikir ada dua perintah (ls
danpwd
) dalam sejarah. Ketika Anda-n
berpikir, (Saya punya dua perintah dalam sejarah saya, dan ada dua perintah di .bash_history, oleh karena itu saya up to date.)Pengalaman saya adalah bahwa shell memperbarui file histori pada waktu keluar. Jadi "sejarah" awal shell bergantung pada pandangan shell terbaru tentang sejarah.
Hasil dari ini adalah Anda bisa mendapatkan perintah yang datang dan pergi dari sejarah, tergantung pada bagaimana shell lain mulai dan berhenti.
sumber
histappend
. Masalahnya bukan konten yang tidak terduga, tetapi total kehilangan konten yang disimpan sebelumnya.Saya telah melihat ini terjadi sebelumnya tetapi itu adalah masalah dengan kesalahan disk yang terjadi dalam peningkatan frekuensi. Saya akan menjalankan pemindaian pada drive. Jika ternyata drive tersebut baik-baik saja, saya akan memeriksa untuk melihat apakah file ini tidak melampaui batas riwayat shell sewenang-wenang.
Sesuatu yang mungkin dapat mencegah hal itu terjadi adalah tetap memangkas file kembali ke 80 baris atau berapa banyak perintah yang Anda inginkan sejarahnya.
sumber
int
bash menyimpannya juga.