Einige Instanzen von bash ändern den Befehlsverlauf, wenn Sie einen vorherigen Befehl wiederverwenden und bearbeiten, andere anscheinend nicht. Ich habe gesucht und gesucht, aber nichts gefunden, das besagt, wie verhindert werden kann, dass Befehle im Verlauf geändert werden, wenn sie wiederverwendet und bearbeitet werden.
Es gibt Fragen wie diese , aber das scheint zu sagen, wie man mit der Geschichte umgeht, die bearbeitet wird. Ich bin erst kürzlich auf eine Bash-Instanz gestoßen, die den Verlauf bearbeitet, wenn Sie einen Befehl wiederverwenden. Alle vorherigen Bash-Shells, die ich verwendet habe, wurden (soweit mir bekannt ist) so konfiguriert, dass sie den Verlauf nicht ändern, wenn Sie sie wiederverwenden und bearbeiten Sie einen Befehl. (Vielleicht habe ich in den letzten 15 Jahren meiner Shell-Geschichte einfach nicht genug Aufmerksamkeit geschenkt ...)
Das ist wahrscheinlich die beste Frage: KANN ich bash NIEMALS sagen, dass die Historie geändert werden soll - und wenn ja, wie?
quelle
history -p
Sie Verlaufserweiterungen durchführen, ohne die Verlaufsdatei zu beeinflussen. Sie können dasselbehistory -s
tun und an den Verlauf anhängen, ohne ihn auszuführen. Sie könnenHISTIGNORE='start of a command I never want in history.*:command2.*'
bestimmte Befehle aus dem Verlauf entfernen.set revert-all-at-newline on
Lösen die in der Frage, die Sie verlinken, nicht Ihr Problem? Können Sie zeigen, wie das Problem reproduziert werden kann? Beachten Sie, dass Sie auchzsh
für ein Verhalten verwenden können, das Ihren Vorstellungen entspricht.history -p
ich mir die Manpage anschaue, muss ich das für jeden Befehl tun, den ich wiederverwenden möchte - stimmt das? Wenn ja, ist das nicht ganz das, wonach ich suche. Wie bereits erwähnt, habe ich Bash-Instanzen verwendet, die den Verlauf nicht ändern, wenn ein Befehl erneut verwendet und bearbeitet wird.revert-all-at-newline
es genau das ist, was ich brauche. Wenn ich einen Befehl bearbeite und STRG-C drücke, um ihn abzubrechen, soll sich dies auch nicht auf den Verlauf auswirken. Ich musste Bash noch nie konfigurieren , um den Verlauf nicht zu ändern. Dies ist einer der Gründe, warum ich verwirrt bin, warum sich eine Neuinstallation manchmal auf die eine und manchmal auf die andere Weise verhält. Übrigens zeigt in einer Instanz, in der der Verlauf bei der Wiederverwendung von Befehlen nicht bearbeitet wird, abind -V | grep revert
an, dassrevert-all-at-newline
die Option deaktiviert ist.bash
. Alles dreht sich um Readline. Es gibt verschiedene Implementierungen derreadline
Bibliothek, und es hat auch einen eigenen Satz von Einstellungen (eine Menge von ihnen) und eine eigene Konfigurationsdatei. Ich bin mir nicht sicher, ob dies eine Einstellung oder einfach ein Implementierungsunterschied ist, aber Sie sollten in der readline-bezogenen Dokumentation suchen, nicht in der bash.Antworten:
Es stellt sich heraus,
revert-all-at-newline
ist die Antwort. Ich mussteset revert-all-at-newline on
in meine~/.inputrc
Datei aufnehmen, da die Verwendung desset
Befehls an der Bash-Eingabeaufforderung keine Auswirkungen hatte. (Dann musste ich natürlich eine neue Shell starten.)Außerdem habe ich festgestellt, dass
~/.inputrc
geladen wird, anstatt,/etc/inputrc
wenn vorhanden, was bedeutet, dass die in letzterem definierten Standardeinstellungen beim Erstellen nicht mehr aktiv sind~/.inputrc
. Um dies zu beheben, beginnen Sie~/.inputrc
mit$include /etc/inputrc
.Vielen Dank an @ StéphaneChazelas für den Hinweis in die richtige Richtung.
quelle
In ~ / .bashrc können Sie hinzufügen
quelle
histappend
ist aktiviert, aber in meinem Verlauf werden weiterhin Änderungen an vorherigen Befehlen angezeigt.