Wie bekomme ich eine unendliche Befehlsgeschichte in Bash?
54
Ich setze export HISTSIZE=99999999999999aber ist das der beste Weg? Ich weiß nicht, ob ein Überlauf auftreten könnte. Ich suche nach einer getesteten, zuverlässigen Methode zum Entfernen von Beschränkungen des Befehlsverlaufs.
Es gibt keinen eingebauten Mechanismus dafür, den ich kenne.
Ich kommentiere nur, damit ich es auch weiß, wenn dies beantwortet wird !!
2
debian-administration.org/articles/543 könnte eine bessere Antwort sein. Zumindest werden größere Unendlich-Werte verarbeitet als bei der Superuser-Lösung. :-)
Sie könnten das in der Praxis wahrscheinlich auf 9999 reduzieren (oder sogar 999; ich benutze 1000). Ich habe noch nie eine Geschichte gefunden, die größer als 1000 ist. Wenn ich einen Befehl wiederherstellen möchte, um ihn in ein Skript umzuwandeln, mache ich das normalerweise innerhalb von tausend Befehlen. Ansonsten kann es gehen und es wird kein Schaden angerichtet.
Jonathan Leffler
@ JonathanLeffler: Meins ist 1300 Zeilen, und es ist so klein, wie ich es machen kann. Strg-R ist sehr nützlich.
l0b0
Antworten:
69
es ist in der Tat nicht (gut) dokumentiert und ich schätze, 99% der Bash-Benutzer, die dies geplant haben, setzen HISTSIZE auf eine sehr große Anzahl.
In der GNU wird der Bash-Verlauf über die mächtige Readline-Bibliothek abgewickelt. Die Bibliothek hat die Option, die Größe des Verlaufs zu begrenzen ("Stifle" im Readline-Jargon) oder nicht, und bash setzt den Readline-Verlauf einfach auf "Stifled / Unstifled". Wenn Sie sich zB GNU bash Version 4.2, Datei variables.c, Zeile 4443, Funktion void sv_histize (char *) ansehen, finden Sie diesen Kommentar (und das gesamte Ein- und Ausblenden in der folgenden Funktion):
/ * Was ist zu tun, nachdem sich die Variablen HISTSIZE oder HISTFILESIZE geändert haben?
Wenn es einen Wert für diese HISTSIZE gibt (und dieser numerisch ist), ersticken Sie den Verlauf. Andernfalls können
Sie den Verlauf entstören , wenn für diese Variable kein Wert vorhanden ist . Wenn der Name HISTFILESIZE lautet und der Wert
numerisch ist, kürzen Sie die Verlaufsdatei so, dass sie nicht mehr als so viele
Zeilen enthält. * /
Antworten:
es ist in der Tat nicht (gut) dokumentiert und ich schätze, 99% der Bash-Benutzer, die dies geplant haben, setzen HISTSIZE auf eine sehr große Anzahl.
In der GNU wird der Bash-Verlauf über die mächtige Readline-Bibliothek abgewickelt. Die Bibliothek hat die Option, die Größe des Verlaufs zu begrenzen ("Stifle" im Readline-Jargon) oder nicht, und bash setzt den Readline-Verlauf einfach auf "Stifled / Unstifled". Wenn Sie sich zB GNU bash Version 4.2, Datei variables.c, Zeile 4443, Funktion void sv_histize (char *) ansehen, finden Sie diesen Kommentar (und das gesamte Ein- und Ausblenden in der folgenden Funktion):
Das sollte also den Trick machen:
Und auch das (wenn Sie sich trotzig fühlen):
Hoffe das hilft.
quelle