Nasıl: Sınırsız Bash / Shell geçmişi?


83

Bash'te sınırsız bir tarih tanımlamanın bir yolu var mı?

Yanıtlar:


82

Bunu .bashrc(Linux) veya .bash_profile(MacOS) 'a ekleyin :

export HISTFILESIZE=
export HISTSIZE=

İşte, sınırsız tarih. Şu anda 27000 kayıt var :)

Kimden man bash:

Eğer HISTFILESIZEayarlanmazsa, hiçbir kesinti yapılır.

Bu .bash_historyasla kısaltılmaz demektir

Aynı HISTSIZEşeyi belgelememiş olmamama rağmen , aynı şey geçerli görünüyor .

Ben deneyeceğim başka bir güzel özellik şudur:

Eğer HISTTIMEFORMATdeğişken ayarlanır zaman damgaları geçmiş açıklama karakteri ile işaretlenmiştir geçmiş dosyasına yazılır, böylece aşağıdaki gibi, kabuk oturumlar boyunca korunabilir:

export HISTTIMEFORMAT="%F %T "

Bunu zaten denediyseniz bana bildirin.


3
Bu aslında pek çok durumda işe yaramaz ve bash geçmişi hala kesiliyor. Daha eksiksiz bir çözüm için aşağıdaki cevabımı inceleyin.
fotinakis

2
Uyarı: Bu gdb; eğer bir HISTSIZEdeğişken ayarlarsanız, bunu 0 olarak alır, böylece tarihin büyüklüğünü tamamen devre dışı bırakır.
Matteo Italia

2
notlar: İhtiyacınız olmayan export, HISTFILESIZEhatlar (değil bayt) sayısında ve geçmiş dosyası değişken ayarladığınızda yuvarlayan tamsayı olur HISTFILESIZE (ve kabuk çıkar). Yani config dosyanızda farklı değerlere sahip iki kere ayarlamayın ...
vaab

@ vaab: HISTFILE dışa aktarmazsam, hist dosyamın alt kabuklarda "echo $ HISTFILE" kullandığını göremiyorum, bu yüzden gerekli olmasa da yardımcı olabilir ve tespit edebileceğim bir zararı yok.
Jeff Learman,

41

(cevabımı https://stackoverflow.com/a/19533853/128597 adresinden yeniden göndererek )

Yıllar boyunca birçok büyük, çirkin yinelemelerden ve garip kenar durumlarından sonra, şimdi .bashrc'imin buna yönelik özel bir bölümü var .

Öncelikle, .bashrc'nizin bu bölümünü yorumlamalı veya kaldırmalısınız (Ubuntu için varsayılan). Bunu yapmazsanız, belirli ortamlar (çalışan screenoturumlar gibi ) geçmişinizi kısaltacaktır:

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

İkincisi, bunu .bashrc dosyasının altına ekleyin:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://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 bir şifreyi yanlışlıkla yapıştırırsanız, tarihin yazılmasını engellemek için yalnızca% -9'unu öldüremezsiniz, onu 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 10 MB’ye yükselse bile (bu uzun, uzun zaman alacaktır) bash başlangıç ​​saatiniz üzerinde çok fazla bir etki fark etmeyeceksiniz.


4
Ayarladığınızda geçmiş dosyası kesiliyor HISTFILESIZE, bu nedenle istediğiniz olay dışında böyle bir olayın oluşumunu kaldırmalısınız. Ayrıca kabuk çıkışında da kesilecektir (ancak bu bekleniyor). Ve ihtiyacın olmamalı export.
vaab

3
@ vaab Dışa aktarmazsanız, böyle bir şey yapmak bash --norcgeçmişi tekrar kısaltacaktır.
Yongwei Wu

1
export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"Shell geçmişini oturum başına ayrı tutmak için kullanıyorum (ana bilgisayar adına ve tty adına göre). Tabii önce ~ / hist dizini oluşturmalıyım.
Jeff Learman

2
PROMPT_COMMAND'ın değerini kontrol etmek isteyebilir ve sisteminize çılgınca şeyler yapacağı için bunu tekrar tekrar körlemeyebilirsiniz. Boş bir denetim veya daha iyisi, ancak kabuk değişkeni genişletme araması muhtemelen daha güvenlidir.
dragon788

3
Bunu @ dragon788 atıfta bulunan sorunu önlemek için kullanın:PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
Brian Vandenberg

9

Dahil et ~ / .bashrc :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

Bu cevap aşağıdaki kriterleri karşılamaktadır:

  1. ayrı bir ana geçmiş (hiçbir oturum geçmişinizi kesemez)

  2. otomatik tarih yazımı (kısayol tuşları yok)

  3. seyrek yazar (her komuttan sonra eklenmez)

arka fon

Etkileşimli başlangıçta, $HISTFILESIZEbir sayıya ayarlanmışsa, bash $HISTFILEbu sayıya düşer . Etkileşimli kapanışta, kabuk seçeneği histappendayarlanmışsa, bash $HISTSIZEsatır ekler $HISTFILE, aksi takdirde üzerine yazar $HISTFILE.

OSX için ipuçları (Terminal)

Terminal'de bir sekme her yaratıldığında ~/.bash_profileokunur, yani bash sizi okumaya devam etmez ~/.bashrc. Aşağıdaki satırları listenize ekleyin ~/etc/bash_profile:

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

ekran için ipuçları

Ekran kullanıyorsanız, yapılandırma dosyanız ~ / .screenrc'dir. Eğer ekranın geçmişi kaydetmesini istiyorsanız, sadece bash başlangıç ​​dosyalarınızı kaynaklayacak bir giriş kabuğu kullanması (ve geçmişinizi kaydetmesi) yeterlidir.

# use bash, make it a login shell
defshell -bash

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.