Antworten:
Fügen Sie dies zu Ihrem .bashrc
(Linux) oder .bash_profile
(MacOS) hinzu:
export HISTFILESIZE=
export HISTSIZE=
Es geht los, unbegrenzte Geschichte. Derzeit habe ich 27000 Einträge :)
Von man bash
:
Wenn
HISTFILESIZE
nicht festgelegt, wird keine Kürzung durchgeführt.
Das heißt, .bash_history
wird nie abgeschnitten
Das scheint auch so zu sein HISTSIZE
, obwohl ich das nicht dokumentiert finden konnte.
Ein weiteres nettes Feature, das ich ausprobieren werde, ist folgendes:
Wenn die
HISTTIMEFORMAT
Variable festgelegt ist, werden Zeitstempel in die Verlaufsdatei geschrieben, die mit dem Verlaufskommentarzeichen gekennzeichnet ist, sodass sie möglicherweise über Shellsitzungen hinweg beibehalten werden, z.
export HISTTIMEFORMAT="%F %T "
Lassen Sie mich wissen, wenn Sie das bereits versucht haben ...
gdb
; Wenn Sie eine HISTSIZE
Variable festlegen , wird sie als 0 verwendet, wodurch die Verlaufsgröße vollständig deaktiviert wird.
export
, die HISTFILESIZE
Anzahl der Zeilen (nicht die Bytes), und das Abschneiden der Verlaufsdatei erfolgt, wenn Sie die Variable setzenHISTFILESIZE
(und wenn die Shell beendet wird). Stelle es also nicht zweimal in deiner Konfigurationsdatei mit unterschiedlichen Werten ein ...
(Reposting meiner Antwort von https://stackoverflow.com/a/19533853/128597 )
Nach vielen großen, hässlichen Iterationen und seltsamen Randbemerkungen im Laufe der Jahre habe ich jetzt einen kurzen Abschnitt meines .bashrc-Archivs , der sich diesem Thema widmet.
Zunächst müssen Sie diesen Abschnitt Ihrer .bashrc-Datei auskommentieren oder entfernen (Standardeinstellung für Ubuntu). Andernfalls wird Ihr Verlauf in bestimmten Umgebungen (z. B. beim Ausführen von screen
Sitzungen) weiterhin gekürzt:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Zweitens, fügen Sie dies am Ende Ihrer .bashrc hinzu:
# 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"
Hinweis: Jeder Befehl wird sofort nach seiner Ausführung geschrieben. Wenn Sie also versehentlich ein Kennwort einfügen, können Sie nicht einfach -9 %% töten, um das Schreiben des Verlaufs zu vermeiden, sondern müssen es manuell entfernen.
Beachten Sie auch, dass bei jeder Bash-Sitzung die vollständige Verlaufsdatei in den Speicher geladen wird. Selbst wenn Ihre Verlaufsdatei auf 10 MB anwächst (was sehr lange dauert ), werden Sie keine großen Auswirkungen auf Ihre Bash-Startzeit bemerken.
HISTFILESIZE
. Aus diesem Grund sollten Sie jedes Auftreten eines solchen Ereignisses mit Ausnahme des von Ihnen gewünschten Ereignisses entfernen. Es wird auch beim Beenden der Shell abgeschnitten (aber das wird erwartet). Und du solltest nicht brauchen export
.
bash --norc
wird der Verlauf durch einen Vorgang wie folgt erneut abgeschnitten.
export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
, um den Shell-Verlauf pro Sitzung zu trennen (basierend auf dem Hostnamen und dem TTY-Namen). Natürlich muss ich zuerst das Verzeichnis ~ / hist erstellen.
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
In ~ / .bashrc aufnehmen :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
Diese Antwort erfüllt die folgenden Kriterien:
einen separaten Master-Verlauf (keine Sitzung kann Ihren Verlauf unterbrechen)
automatisches Schreiben des Verlaufs (keine Hotkeys)
seltenes Schreiben (kein Anhängen nach jedem Befehl)
Wenn beim interaktiven Start $HISTFILESIZE
eine Zahl festgelegt ist, wird die Bash $HISTFILE
auf diese Zahl gekürzt . Wenn beim interaktiven Schließen die Shell-Option histappend
aktiviert ist, fügt bash $HISTSIZE
Zeilen an $HISTFILE
, andernfalls wird überschrieben $HISTFILE
.
Jedes Mal, wenn eine Registerkarte in Terminal erstellt wird, ~/.bash_profile
wird sie gelesen ~/.bashrc
. Fügen Sie die folgende Zeile zu Ihrem hinzu ~/etc/bash_profile
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
Wenn Sie screen verwenden, lautet Ihre Konfigurationsdatei ~ / .screenrc. Wenn Sie möchten, dass der Bildschirm den Verlauf aufzeichnet, müssen Sie ihn nur so einstellen, dass er eine Anmeldeshell verwendet, die Ihre Bash-Startdateien abruft (und Ihren Verlauf aufzeichnet).
# use bash, make it a login shell
defshell -bash
Ein anderes Konzept (trifft möglicherweise nicht zu), aber Sie können unlimited
bei der Verwendung von Shell-Sink eine Vorgeschichte haben .