Sınırsız Bash Geçmişi [kapalı]


350

.bash_historyDosyamın sınırsız olmasını istiyorum . Örneğin, her zaman geri dönüp bir şeyi nasıl oluşturduğumu / yapılandırdığımı veya bu şık komutun ne olduğunu ya da bir komutun haftalar önce bir şeyi nasıl kırdığını görebiliyorum. Bu ayarı nasıl değiştiririm?



1
Bash bir programlama dilidir ve bu programlama ile ilgili değildir?
NeilG

Yanıtlar:


307

.Bashrc öğesini boş bir dizeye ayarlayın HISTSIZEve girin HISTFILESIZE:

HISTSIZE= 
HISTFILESIZE=

Gelen bash 4.3 ve üstü de kullanabilirsiniz HISTSIZE=-1 HISTFILESIZE=-1:

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(dışa aktarma PROMPT_COMMAND = 'geçmiş -a') derhal bash için komutları temizleyebilir.
cruelcage

3
Ayarlamak HISTSIZE= HISTFILESIZE=, en azından benim için bash tarihini tamamen devre dışı bırakmaya neden olur.
Philipp Ludwig

5
@PhilippLudwig ayarı HISTSIZE=-1 HISTFILESIZE=-1geçmişimi devre dışı bırakırken HISTSIZE= HISTFILESIZE=, hile yaptı. CentOS 7 burada.
Seether

1
@PhilippLudwig Sanırım HISTSIZE= HISTFILESIZE=sizden daha ziyadeexport HISTSIZE= export HISTFILESIZE=
Matzz

3
@Seether Bu sorunun cevabı açıkça "Bash 4.3 ve sonrasında ..." yazıyor. CentOS 7, 4.2.x bash değerine sahiptir.
villapx

426

Yıllar boyunca birçok büyük, çirkin yineleme ve garip kenar olaylarından sonra, şimdi .bashrc'nin buna adanmış özlü bir bölümüne sahibim .

Öncelikle, .bashrc dosyanızın (Ubuntu için varsayılan) bu bölümünü yorumlamanız veya kaldırmanız gerekir . Bunu yapmazsanız, belirli ortamlar (çalışan screenoturumlar gibi ) geçmişinizi keser:

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

İkinci olarak, bunu .bashrc'nizin altına ekleyin:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

Not: Her komut çalıştırıldıktan hemen sonra yazılır, bu nedenle yanlışlıkla bir parola yapıştırırsanız, geçmiş yazma işleminden kaçınmak için "-9 %%" yi öldüremezsiniz, manuel olarak kaldırmanız gerekir.

Ayrıca her bash oturumunun tam geçmiş dosyasını belleğe yükleyeceğini unutmayın, ancak geçmiş dosyanız 10MB'ye kadar büyürse ( uzun, uzun zaman alacaktır) bash başlangıç ​​zamanınız üzerinde çok fazla bir etki görmeyeceksiniz.


1
@AquariusPower - Tam olarak neyin üstünde olduğunu deneyin , -1 yerine HISTFILESIZE=ve öğesini HISTSIZE=boş bırakın ve bir .bashrc veya .bash_profile veya .profile dosyasında bu parametrelerin başka bildirimlerine sahip olmadığınızdan emin olun.
fotinakis

2
suçlu .bashrc, ben bu kurulum sonra .bashrc tarafından yüklenen başka bir dosyada vardı, şimdi çalışıyor! Teşekkürler!
Kova Gücü

10
Standart bash sistemime ekle ve güncel geçmişi eklemek de güzel, bu yüzden yapılandırmadan sonra çalıştırıncat ~/.bash_history >>~/.bash_eternal_history
Jean-Christophe Meillaud

2
Geçmiş geçmişini korumak için geçmiş dosyasını geçerli geçmişinizle başlatın.
Arthur

3
Çok teşekkürler - gerçeği ayarı HISTFILESIZE(ve muhtemelen HISTSIZEalacak) hemen etkisini edemez overemphasized .
Attie

37

Jörg Beyer Yukarıda bahsedildiği gibi HISTSIZEve HISTFILESIZEanahtardır.

Ayrıca, yinelenen geçmiş komutlarını ( ) saklamamak gibi harika şeyler yapmanıza izin veren çevresel değişkeni kesinlikle kontrol etmelisiniz . Yüzlerce satıra veya benzerine göz atmanız gerekiyorsa, sınırsız geçmişe sahip olmanın bir anlamı yok .HISTCONTROLHISTCONTROL=erasedupscd ..

Linkler: burada ve bash tarihi ile çalışmak . Bash Değişken SSS de göz atmaya değer .


14
Bu cd ​​satırları verilen komutlar için bağlam sağlar. Aslında inanılmaz derecede faydalılar. Geçmişi kullanmanın tek yolu her seferinde tek bir komutla çağrı yapmak olmadıkça, kimsenin neden onları silmek isteyeceğini anlayamıyorum.
iconoclast

@simont Ayrıca HISTCONTROL ile ignorespace seçeneğini kullanıyorum, sonra bunu parola gibi tarihe yazılmasını istemediğim herhangi bir şey için kullanıyorum.
bigtunacan

6
Komut dizilerini yeniden kullanırsanız, çizgileri düzenli tutmak çok faydalıdır. Örneğin, Ctrl-rsomechars Ctrl-o Ctrl-o Ctrl-o Ctrl-o. Bu yüzden tarihte kopyaları saklıyorum.
Stéphane Gourichon

1
@ StéphaneGourichon ne Ctrl-oiçin?
Ciprian Tomoiagă

4
@ CiprianTomoiagă Ctrl-okomutu komut isteminde çalıştırır ve geçmişte bir öncekinden hemen sonra komutu gösterir. Bunun bir faydası, Ctrl-reski bir komut bulmak için kullandıktan sonra (muhtemelen tarihte komşu komutlara gitmek için yukarı ve aşağı oku kullanarak), sonsuz döngüde bile önceki komutları tekrar çalıştırmak için Ctrlbasılı tutmanız ve obirkaç kez basmanız yeterlidir. Eğer istersen. Ayrıca bkz GNU Readline - Vikipedi
Stéphane Gourichon

22

Burada (en az) ilgili iki env var vardır:

  • HISTSIZE: geçmiş dosyasındaki girişlerin sayısı
  • HISTFILESIZE: geçmiş dosyasındaki satır sayısı

Sınırsız teriminin genellikle çok büyük (veya sınırsız dosya depolama alanınız var mı) olduğunu kabul edebileceğimizi düşünüyorum . Bu yüzden değerleri çok büyük ayarlayın.


23
"1000000000'in sadece çok küçük sonsuzluk değerleri için sonsuza eşit olduğuna dikkat edilmelidir. - sepp2k" lol. evet, ben sonsuz sonsuz değerleri ile içerik (örneğin, bir ay sık terminal kullanımı).
Francis Haart

6
sık sık bir aylık terminal kullanımı sonsuz küçüklükte bir sonsuzluk oranıdır. Ben sık terminal kullanım ömrünün sonsuzluk çok çok çok küçük bir değere eşit olduğunu söyleyebilirim . Ancak sık kullanılan terminal kullanım ömrü, kabuk geçmişim için yeterince iyi. ;)
iconoclast

2
HISTSIZE ve / veya HISTFILESIZE öğelerini çok büyük ayarlarsanız, zsh'nin daha eski sürümleri en azından çökecektir, çünkü yeterli belleği önceden ayırmaya çalışır. Bu, kabukları olarak zsh kullanan araçlar çalıştırırken alakalı hale geldi (örneğin dbx).
Brian Vandenberg
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.