Histappend kullanırken geçmişte kayıp


18

Ben var bu yüzden, tarihin bir sürü tutmak ister histappendskinTenimde set .bashrc. Çoğu zaman her şey iyi çalışır, tarih birçok kabuktan inşa edilmiştir. Bununla birlikte, her seferinde, yeni bir kabuk başlatacağım ve tüm geçmişi kaybettim. - ve genellikle sadece son kabuktaki komutlardan bazılarını içeriyor (yani eklemek yerine sadece üzerine yazmak değil) ). Bu nedenle, .bash_historydosyayı öldüren başka bir işlemden ziyade kabuk çıkışında gerçekleştiğinden şüpheleniyorum . Bu sonucu desteklediğimde, komut istemimde geçmiş komut numaraları var ve bunların aşağı atladığını hiç görmedim.

Hiç benzer bir sorunla karşılaşan oldu mu? Ya da sadece sorunun nasıl izleneceği konusunda önerileriniz var mı?


Yanıtlar:


13

Kendi sorumu cevapladığım için özür dilerim, ama diğer cevapların hiçbiri soruna gerçekten değinmiyor.

Sonunda bunun sadece gnome-terminalkendini kapatırken (yani dosya> çıkış, 'x' düğmesi, alt + F4) ve hatta o zaman genellikle sadece birkaç terminali hızlı bir şekilde arka arkaya kapatırken gerçekleştiğini anladım . Kabuğu kapatmak için ctrl-D kullanıldığında asla terminalin takip etmesine izin verilmez.

Eğer yeterince iyi sabitleyebilirsem, bir gnome-terminal hata raporu vereceğim. Bu arada, belki de bu, google'dan buraya gelen diğer bazı insanlara yardımcı olacaktır!


10

Bunun neden olduğu hakkında hiçbir fikrim yok, ancak her bas isteminde bash'ı geçmiş dosyasına yazmaya zorlayarak sorunu atlatabilirsiniz:

PROMPT_COMMAND="history -a; history -n"

Bu, bash bir sonraki komutu her istediğinde geçmiş dosyasını yazar (-a) ve sonra yeniden okur (-n). Ek avantaj: kabuk 2 tarihinde kabuk 1'de X komutunu alırsınız.


GNU bash, sürüm 3.00.15 (1) -release (i686-redhat-linux-gnu) üzerinde çalışmaz
David Mackintosh

2
"İşe yaramaz" ın ne anlama geldiğini açıklayabilir misiniz?
innaM

3
Alıntı yaptığınız ek fayda, çoğu durumda bir dezavantajdır. Aradığım davranış bu değil, çünkü ayrı kabuklarda tamamen ayrı iki görev yapıyor olabilirim ve tarihlerini karıştırmak istemiyorum. Bu muhtemelen hiçbir şeye yardımcı olmaz. Tarih kaybolduğunda, .bash_history içeriğini siliyor - kabuk çıkışında mı yoksa PROMPT_COMMAND tarafından yazılsalar da önemli olacağını sanmıyorum.
Cascabel

5
history -nlapa lapa. Bunu yapmak daha güvenilir history -a; history -c; history -r. Bunu açıklamak için, ilk önce history -adoğru olanı - not ettiğiniz .bash_historytüm komutlarınızı, yazdığınız sırayla - içerdiğini - history -aher komuttan sonra çalıştırdığınızı varsayarak - ilk önce not edeceğim . Zorluk, kabuğun tarih fikrini .bash_history dosyasıyla senkronize tutmaktır. Bu kolaydır -cve -rsorun büyükse yavaş olabilmesidir. -nhangi satırların yeni olduğunu yanlış tanımladığı için kesilebilir. (Burada yerim
kalmadı

4
(... kullanırsanız -n) hayal ne kabuk 1'de bir komut çalıştırmak: ls. Sonra başka bir kabukta, Kabuk İki, yürütürsün cd. Şimdi, .bash_history içindeki tarih history -asizin PROMPT_COMMANDiçerdiği için doğrudur - içerecektir ls \n cd \n. Ardından, kabuk One'a geri dönün ve yazın pwd. Shell One , tarihte ( ) yalnızca komut olduğunu düşünüyorls . Şimdi tarihte iki komut ( lsve pwd) olduğunu düşünüyor . Bunu yaptığınızda -n(geçmişimde iki komut var ve .bash_history'de iki komut var, bu yüzden güncelim.)
Aaron McDaid

3

Benim tecrübem, kabukların çıkışta tarih dosyasını güncellemesiydi. Yani bir kabuğun ilk "tarihi" en son çıkan kabuğun tarih hakkındaki görüşüne bağlıydı.

Bunun sonucu, diğer mermilerin nasıl başlatıldığı ve durdurulduğuna bağlı olarak, geçmişten gelen ve giden komutları alabilmenizdir.


2
Geçmiş dosyasının nasıl yazıldığını çok iyi anlıyorum - bu yüzden kullandığım sorumda belirtmiştim histappend. Sorun beklenmedik içerik değil, daha önce saklanan içeriğin toplam kaybıdır.
Cascabel

Bu, tarihimi neden kaybettiğimi açıklıyor ...
B Seven

1

Bu daha önce gördüm ama artan sıklıkta meydana gelen disk hataları ile ilgili bir sorun oldu. Sürücüde bir tarama yapardım. Sürücünün iyi olduğu ortaya çıkarsa, bu dosyanın rastgele bir kabuk geçmişi sınırını geçip geçmediğini kontrol ederim.

Bunun olmasını engelleyebilecek bir şey, dosyayı 80 satıra ya da tarihin olmasını istediğiniz birçok komutun budamasına devam etmektir.


Bu işlemde makinede kök erişimim yok, ancak sürücünün iyi olduğundan eminim. Giriş dizinim laboratuvarımızdaki bir sunucuda (bol miktarda RAID, sanırım) ve nfs-mount'da saklanıyor. "Keyfi kabuk geçmişi limiti" ile ne demek istiyorsun? Bu, HISTSIZE ve HISTFILESIZE öğelerinin çok altında gerçekleşiyor ve her ikisini de büyük ayarlamış olmama rağmen, intonları bash mağazalarının çok altında .
Cascabel

David Mackintosh'un girişinin muhtemelen olan şey olduğunu söylemeliyim.
Axxmasterr

1
Tamamen emin değilim. Tarihimde asla iki komutla sonlanmamalıyım, çıkış için son kabuğun birkaç düzine komutu olduğunda, geçmiş dosyasında birkaç yüz vardı ve HISTSIZE / HISTFILESIZE 10000 olarak ayarlandı.
Cascabel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.