Warum sollte jemand nicht "histappend" in bash setzen?

36

Nachdem ich herausgefunden habe, was dies shopt -s histappend bedeutet , scheint es eine sehr vernünftige Einstellung zu sein, und ich bin überrascht, dass es nicht die Standardeinstellung ist. Warum sollte jemand seine Historie bei jedem Shell-Exit löschen wollen?

Tshepang
quelle
Abgesehen von dem Missverständnis, was diese Option bewirkt - korrigiert durch @maxscchlepzig - hat "default" mindestens zwei Quellen: bash"pure" oder eine Distribution .bashrc. für die erstere ist @Gilles wahrscheinlich richtig. im letzteren Sinne -s histappend ist beispielsweise Debian seit 2008 standardmäßig aktiviert
underscore_d
3
Nun, Unix ist nicht gerade berühmt für vernünftige Vorgaben? Ich bin gekommen, um die unfreundlichsten Standardeinstellungen zu erwarten: P (geringfügig übertrieben)
Olejorgenb

Antworten:

34

Wenn dies histappendnicht festgelegt ist, bedeutet dies nicht, dass der Verlauf bei jedem Shell-Exit gelöscht wird. Ohne histappendBash liest die Histfile beim Start in den Speicher - während des Betriebs werden neue Einträge hinzugefügt - und beim Verlassen der Shell werden die letzten HISTSIZE-Zeilen in die History-Datei geschrieben, ohne sie anzuhängen, dh den vorherigen Inhalt zu ersetzen.

Wenn zum Beispiel die Histdatei 400 Einträge enthält, werden während der Bash-Laufzeit 10 neue Einträge hinzugefügt - histize wird auf 500 gesetzt, dann enthält die neue Histdatei 410 Einträge.

Dieses Verhalten ist nur problematisch, wenn Sie mehrere Bash-Instanzen gleichzeitig verwenden. In diesem Fall enthält die Verlaufsdatei nur den Inhalt der zuletzt ausgeführten Shell.

Unabhängig davon: Es gibt einige Leute, die aus Datenschutzgründen ihre Historie beim Shell-Exit löschen möchten.

maxschlepzig
quelle
Aus Sicherheitsgründen kann es auch eine gute Idee sein, den Verlauf für den Root-Benutzer nicht zu speichern. Mit dieser Funktion kann root einen Shell-Verlauf erstellen, ohne dass dieser jemals auf der Festplatte gespeichert wird.
Mei
1
+1 für "bedeutet nicht, dass der Verlauf bei jedem Shell-Exit gelöscht wird". Dies wird an anderer Stelle sehr gut erklärt - aber vielleicht nicht kurz genug, um einige Leser zu erreichen, insbesondere im Zusammenhang mit dem Namen der Option (OK, ich könnte eine Weile einer dieser Leser gewesen sein). @Mei, wie hat eine der Permutationen histappendeine Relevanz dafür, ob rootder Verlauf eine Festplatte erreicht? Auch hier wirkt es sich nur auf das aus, was geschrieben steht, nicht wenn .
Underscore_d
5
Läuft jemand weniger als 2 Bash-Instanzen? histappendsowie HISTCONTROL=ignoredups:erasedups:ignorespacescheint ein guter Standard für die meisten Menschen.
Bindestrich
Ist histappendeffektiv bedeutungslos, wenn ich HISTFILESIZE=und HISTSIZE=für unendliche Geschichte habe?
Marc.2377,
@ Marc.2377 Nein, ohne histappendneue Historie von gleichzeitig ausgeführten Shells würde dann verloren gehen und nur die Einträge der zuletzt ausgeführten Shell würden gespeichert. Übrigens weiß ich nicht, ob HISTSIZE=es den gleichen Effekt wie ein Negativ hat HISTSIZE.
Maxschlepzig
9

Aus historischen Gründen denke ich. Die histappendOption gab es erst mit Bash 2.0.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Wurde die Geschichte jedes Mal überschrieben?
Tshepang
3
@ Tshepang: Ja, genau wie jetzt, wenn du es nicht verwendest histappend.
Gilles 'SO - hör auf böse zu sein'
es sollte jetzt die Standardeinstellung sein, aber es ist nicht
Bindestrich