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?


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.


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

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.