Die Länge des Mac OSX-Bash-Shell-Verlaufs kann nicht erhöht werden


26

Ich habe ~ / .bash_profile vor einiger Zeit auf eine Länge von mehr als 500 Zeilen eingestellt, aber das System scheint dies nicht zu erfassen.

Weißt du, warum?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500

Antworten:


34

Sie müssen auch einstellen HISTSIZE=10000000.

HISTFILESIZELegt die Anzahl der Zeilen fest, die in der Verlaufsdatei gespeichert werden sollen, während HISTSIZEdie Anzahl der Zeilen festgelegt wird, die im Speicher gespeichert werden sollen. Beide standardmäßig auf500

Führen echo $HISTFILESIZE $HISTSIZESie diese aus, bevor Sie die Änderung vornehmen, und anschließend erneut. Sie sollten 10000000 500zuerst dann 10000000 10000000danach sehen.


15

Sie müssen Export HISTSIZE und HISTFILESIZEUmgebungsvariablen in Ihrer ~/.bash_profileDatei.

Fügen Sie folgende Zeilen hinzu ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000

8

Antworten:

Alles, was Sie tun müssen, ist HISTSIZEin Ihrem Bash-Profil ( ~/.bash_profile) festgelegt. Sie können HISTFILESIZE unset lassen . Dadurch werden sowohl der speicherinterne als auch der dateibasierte Verlauf konfiguriert .

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Erklärung, zusätzliche Informationen.

Das Problem ist, dass HISTFILESIZE nur den maximalen Verlauf festlegt, der beim Starten einer Sitzung in der Datei gespeichert wird. HISTSIZE bestimmt, wie viele Zeilen am Ende einer Sitzung gespeichert werden. Wenn HISTFILESIZE größer als HISTSIZE ist, wird nie mehr als HISTSIZE angezeigt, da die Datei mit HISTSIZE-Befehlen überschrieben wird (es sei denn, Sie legen den Verlauf für das Anhängen fest, dies ist jedoch ein separates Thema: Schauen Sie histappendin den Shell-Befehlen nach). .

Dies ist der Grund, warum Sie keine Wirkung sehen. Bei der Standardeinstellung HISTSIZE (wahrscheinlich 500) wird Ihre Verlaufsdatei immer durch die neuesten $ HISTSIZE-Befehle überschrieben. Alles, was älter ist (was möglicherweise die Liste über $ HISTSIZE hinaus erweitert), wird gelöscht.

In den meisten Fällen muss HISTFILESIZE nicht unabhängig von HISTSIZE eingestellt werden.

HISTSIZE legt fest, wie viele Zeilen in die Verlaufsdatei geschrieben werden. Die Befehlsliste wird beim Beenden abgeschnitten, bevor in die Verlaufsdatei geschrieben wird, wobei N neueste Zeilen beibehalten werden. Standardmäßig überschreibt diese Liste die Verlaufsdatei.

HISTFILESIZE legt fest, wie groß die Verlaufsdatei (in Zeilen) sein kann. Die Datei wird beim Start abgeschnitten, wobei N neueste Zeilen erhalten bleiben. Darüber hinaus wird die Verlaufsdatei möglicherweise abgeschnitten, wenn HISTFILESIZE festgelegt wird.

Obwohl es undokumentiert zu sein scheint, legt BASH schließlich HISTFILESIZE basierend auf HISTSIZE fest, wenn HISTSIZE während des Starts festgelegt wird. Ich habe dies auf macOS und einigen Ubuntu-Varianten ausprobiert und das Verhalten ist konsistent. Wenn Sie HISTSIZE in einer Startdatei (Set nicht über die Kommandozeile mit allen Mitteln), wird HISTFILESIZE übereinstimmen eingestellt werden. (Probieren Sie es selbst aus: Setzen Sie HISTSIZE in .bash_profile auf einen beliebig großen Wert, beenden Sie und starten Sie ein neues Terminal, echo $HISTSIZE $HISTFILESIZEund Sie werden feststellen, dass sie übereinstimmen.)

Infolgedessen gibt es keinen Grund, HISTFILESIZE zu berühren, es sei denn, Sie möchten andere Werte verwenden, und die Verwendungsfälle für andere Werte sind selten (und umfassen in der Regel weitere Einstellungen für die Verlaufsanpassung, um nützliche Informationen zu erhalten).


Sie sind richtig, Zim. Der Bash-Quellcode zeigt, dass HISTFILESIZE nur auf HISTSIZE gesetzt wird, wenn HISTFILESIZE nicht gesetzt ist. git.savannah.gnu.org/cgit/bash.git/tree/...
robert
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.