Was bestimmt, was im Befehl bash history angezeigt wird?

2

Beim Ausführen historyerhalte ich eine Liste mit Befehlen. Es scheint jedoch auch für einen bestimmten Zeitraum nicht vollständig zu sein. (Es fühlt sich nicht so an, als hätte es eine kontinuierliche Abdeckung der vergangenen N Befehle - es fühlt sich so an, als würden einige fehlen.) Außerdem ist die Ausgabe von historyauf verschiedenen Terminal-Registerkarten unterschiedlich. Liegt das daran, dass der Verlauf erst auf die Festplatte geschrieben wird, wenn die Registerkarte geschlossen wird? Erklärt das, warum bestimmte Befehle verloren zu gehen scheinen, weil sie durch Schließen von Registerkarten überschrieben werden?

Ich bin auf OSX 10.8 für das, was es wert ist.

Nick Heiner
quelle

Antworten:

5

Auf verschiedenen Terminals werden unterschiedliche Instanzen von $SHELLBASH ausgeführt (wahrscheinlich, da Sie unter OSX arbeiten). Jede Instanz behält ihren eigenen Verlauf bei, der beim Beenden dieser bestimmten BASH-Instanz in den globalen Sitzungsverlauf eingebunden wird.

Sie können dies versuchen, indem Sie zwei Terminals öffnen, einige Befehle ausführen, dann beide Terminals schließen und ein drittes öffnen. Die Befehle von den (jetzt geschlossenen) beiden vorherigen Terminals befinden sich jetzt in Ihrem Verlauf.

Es gibt auch einige BASH-Optionen, mit denen Sie doppelte Befehle entfernen, Ihre anzeigen $HOME/.bashrcund prüfen können, ob Sie eine Zeile wie die folgende haben:

export HISTCONTROL=ignoredups

Diese Option weist BASH an, keine doppelten Befehle zu speichern. Wenn Sie also ls10-mal ausführen , wird es nur einmal gespeichert.

terdon
quelle
0

Der Shell-Verlauf ist pro Bash-Instanz vorhanden. Es wird beim Start von bash eingelesen und beim Beenden von bash ausgeschrieben. Durch das Schließen des Tabs wird Bash mit Gewalt beendet, sodass der Verlauf nicht mehr wie gewohnt geschrieben werden kann.

Ignacio Vazquez-Abrams
quelle
Was meinst du mit 'Tab schließen'? Wie soll ich die Sitzung beenden, damit bash den Verlauf schreibt?
Nick Heiner
Verwenden Sie exitoder drücken Sie Strg-D in einer leeren Zeile.
Ignacio Vazquez-Abrams