bazen geçmiş komutları .bash_history içinde saklanmaz


20

Dün CentOS 7 cihazımda birçok komut yayınladım. Ama bugün bu komutları almak istediğimde, hiçbir kayıt bulunamadı. Dosyayı .bash_historyaçtığımda, dün yayınladığım komutları hala bulamadım, ancak birkaç gün önce birçok eski komut buldum. Son komutlar neden kaydedilmedi? Tarih yeteneğini nasıl artırabilirim?


Bazen terminal anormal olarak kapatıldığında, tarih kaydedilmez, bana da oldu, ancak bu davranışa neden olan koşulları bilmiyorum
mazlar

Yanıtlar:


11

Geçmiş öğelerinin görünmemesinin en olası nedeni HISTFILE, hiçbir şeye veya HISTSIZEsıfıra ayarlamak değil , aynı makineye iki kez giriş yapmak ve ikinci bash örneğinden (çok az şey yaptığınız veya hiçbir şey yapmadığınız) çıkılmasıdır. çok şey yaptın. Varsayılan olarak Bash geçmişleri birleştirmez ve ikinci Bash çıkışı .bash_history, ilk Bash çıkışı tarafından bu kadar güzel bir şekilde güncellenmiş olanın üzerine yazar .

Bunun olmasını önlemek için üzerine yazmak yerine geçmiş dosyasına ekleyebilirsiniz, histappendkabuk seçeneğini kullanabilirsiniz :

Histappend kabuk seçeneği etkinse (aşağıdaki SHELL BUILTIN COMMANDS altındaki shopt açıklamasına bakın), satırlar geçmiş dosyasına eklenir, aksi takdirde geçmiş dosyasının üzerine yazılır.

Daha fazla bilgi bu cevap nasıl kullanılacağı da dahil HISTSIZE, HISTFILESIZEve HISTCONTROL, çiftleri vb boyutunu kontrol etmek


3

Tarih boyutu da yararlanabileceği iki BASH değişkenlerini değiştirmek için HISTSIZE, HISTFILESIZE(genellikle ayarlanır .bashrc).

BASH man sayfasından açıklama:

HISTSIZE Komut geçmişinde hatırlanması gereken komut sayısı (aşağıdaki TARİH'e bakın). Değer 0 ise, komutlar geçmiş listesine kaydedilmez. Sıfırdan küçük sayısal değerler her komutun geçmiş listesine kaydedilmesine neden olur (sınır yoktur). Kabuk, başlangıç ​​dosyalarını okuduktan sonra varsayılan değeri 500 olarak ayarlar.

HISTFILESIZE Geçmiş dosyasında bulunan maksimum satır sayısı. Bu değişkene bir değer atandığında, gerekirse en eski girişleri kaldırarak bu satırdan daha fazla satır içermeyecek şekilde geçmiş dosyasına izin verilir. Geçmiş dosyası, bir kabuk çıktığında yazıldıktan sonra da bu boyuta kısaltılır. Değer 0 ise, geçmiş dosyası sıfır boyutuna kesilir. Sayısal olmayan değerler ve sıfırdan küçük sayısal değerler kesmeyi engeller. Kabuk, başlangıç ​​dosyalarını okuduktan sonra varsayılan değeri HISTSIZE değerine ayarlar.

Örnek olarak, dosyamda aşağıdaki kurulum var .bashrc:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

1

Bu oldu ama çözüm burada listelenmedi. Nedeni sadece basit bir kopyalama + yapıştırma sorunuydu. Başka bir belgeden bir komut kopyalıyordum ve panoda fazladan boş alan vardı. Bazı nedenlerden dolayı bu, Ubuntu'nun komutu geçmiş dosyasına kaydetmemesine neden oldu.

resim açıklamasını buraya girin

Yukarıdaki resim, google docs pano formumda bulunan komuttu. Bu komut koştu ama tarihimden çıkarıldı. Sadece geri döndüm ve beyaz boşluk olmadan komutu seçtim ve sonra bash tarihinde ortaya çıktı.


5
Geçmiş seçeneklerinden biri boşlukla başlayan satırları yok saymak (kaydetmemek). Genellikle varsayılan olarak açıktır. Bu .bashrc dosyasından değiştirilebilir.
studog

1

HISTCONTROLOrtam değişkeninizin ignorespaceveya olarak ayarlanmadığını doğrulayın ignoreboth.

$ echo $HISTCONTROL
ignoredups  #this is ok

Dosyanızdaki ~/.bash_profileveya ~/.profiledosyanızdaki değeri ayarlayarak değiştirebilirsiniz :

HISTCONTROL=ignoredups

Gönderen bashadam sayfası:

HISTCONTROL

Komutların geçmiş listesine nasıl kaydedileceğini kontrol eden iki nokta üst üste işaretli değerler listesi.

Değer listesi içeriyorsa ignorespace, boşluk karakteriyle başlayan satırlar geçmiş listesine kaydedilmez.

ignoredupsÖnceki geçmiş girişiyle eşleşen satırların değeri kaydedilmemesine neden olur.

Değeri ignorebothiçin kısaltmadır ignorespaceve ignoredups.

Bir değer erasedups, geçerli satırla eşleşen tüm önceki satırların bu satır kaydedilmeden geçmiş listesinden kaldırılmasına neden olur.

Yukarıdaki listede olmayan herhangi bir değer yok sayılır.

Eğer HISTCONTROL kaldırılırsa ya da geçerli bir değer içermiyorsa, tüm hatlar değerine kabuk Geçmiş listesinde kayıtlı olan ayrıştırıcı, konuya göre okumak HISTIGNORE. Çok satırlı bir bileşik komutunun ikinci ve sonraki satırları test edilmez ve değerine bakılmaksızın geçmişe eklenir HISTCONTROL.

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.