web-dev-qa-db-de.com

Unbegrenzte Bash-Geschichte

Ich will mein .bash_history Datei, um unbegrenzt zu sein. z.B. So kann ich immer zurückgehen und sehen, wie ich etwas gebaut/konfiguriert habe, was dieser raffinierte Befehl war oder wie ein Befehl vor Wochen gebrochen hat. Wie ändere ich diese Einstellung?

302
Francis Haart

Setzen Sie HISTSIZE und HISTFILESIZE in .bashrc auf eine leere Zeichenfolge:

HISTSIZE= 
HISTFILESIZE=

In Bash 4.3 und höher können Sie auch 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).
255
Lri

Nach vielen großen, hässlichen Iterationen und seltsamen Edge-Fällen im Laufe der Jahre habe ich jetzt einen kurzen Abschnitt von my .bashrc , der sich diesem Thema widmet.

Zuerst müssen Sie auskommentieren oder diesen Abschnitt Ihrer .bashrc entfernen (Standard für Ubuntu). Andernfalls werden in bestimmten Umgebungen (z. B. beim Ausführen von screen Sitzungen) Ihre Verlaufsdaten weiterhin gekürzt:

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

Zweitens füge dies hinz am Ende deines .bashrc:

# 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"

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, aber selbst wenn Ihre Verlaufsdatei auf 10 MB anwächst (was eine Zeit von lang, lang benötigt), werden Sie nicht viel davon bemerken Dies wirkt sich auf die Startzeit Ihrer Bash aus.

378
fotinakis

Wie Jörg Beyer oben erwähnt hat, sind HISTSIZE und HISTFILESIZE der Schlüssel.

Außerdem sollten Sie unbedingt die Umgebungsvariable HISTCONTROL auschecken, mit der Sie coole Dinge tun können, z. B. doppelte Verlaufsbefehle nicht speichern (HISTCONTROL=erasedups). Es hat keinen Sinn, eine unbegrenzte Historie zu haben, wenn Sie Hunderte Zeilen von cd .. oder ähnliches.

Links: hier und Arbeiten mit der Bash-Historie . Die Bash-Variable FAQ ist auch einen Besuch wert .

34
simont

Hier gibt es (mindestens) zwei relevante Umgebungsvariablen:

  • HISTSIZE: Die Anzahl der Einträge in der Verlaufsdatei
  • HISTFILESIZE: Die Anzahl der Zeilen in der Verlaufsdatei

Ich denke, wir können uns einig sein, dass der Begriff nbegrenzt oft mit sehr groß identisch ist (oder haben Sie unbegrenzten Dateispeicher?). Stellen Sie die Werte also einfach sehr groß ein.

22
Jörg Beyer