Ich arbeite unter Mac OS X, also benutze ich wohl Bash ...?
Manchmal gebe ich etwas ein, an das ich mich in der Geschichte nicht erinnern möchte. Wie entferne ich es?
Ich arbeite unter Mac OS X, also benutze ich wohl Bash ...?
Manchmal gebe ich etwas ein, an das ich mich in der Geschichte nicht erinnern möchte. Wie entferne ich es?
Antworten:
Wenn Sie einen Befehl ausführen möchten, ohne ihn im Verlauf zu speichern, müssen Sie ihm ein zusätzliches Leerzeichen voranstellen
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Dafür benötigen Sie entweder ignorespaceoder ignorebothin HISTCONTROL. Führen Sie beispielsweise aus
HISTCONTROL=ignorespace
Um diese Einstellung dauerhaft zu erhalten, legen Sie sie in Ihrer .bashrc.
Wenn Sie den Befehl bereits ausgeführt haben und ihn aus dem Verlauf entfernen möchten, verwenden Sie zuerst
history
um die Liste der Befehle in Ihrem Verlauf anzuzeigen. Suchen Sie die Nummer neben der Nummer, die Sie löschen möchten (z. B. 1234), und führen Sie sie aus
history -d 1234
Wenn die zu löschende Zeile bereits in Ihre $ HISTFILE geschrieben wurde (was normalerweise geschieht, wenn Sie eine Sitzung standardmäßig beenden), müssen Sie in $ HISTFILE zurückschreiben, oder die Zeile wird erneut angezeigt, wenn Sie eine neue öffnen Session:
history -w
history -a. In diesem Fall wird es bereits in die Verlaufsdatei geschrieben und nicht beim Beenden in der normalen Konfiguration. Insbesondere: mywiki.wooledge.org/BashFAQ/088
history -w. Andernfalls ist die gelöschte Zeile beim Verlassen noch vorhanden!
history -wAfter history -d {num}war genau das, was ich brauchte - dieses kritische Leckerbissen sollte der Antwort hinzugefügt werden, sonst könnte ein Benutzer denken, dass ein temporäres Löschen aus der aktuellen Shell tatsächlich permanent ist.
history -wist für Einträge erforderlich, die bereits in die .bash_historyDatei geschrieben wurden. So reproduzieren Sie (z. B. unter CentOS 7 mit Standardkonfiguration): 1. Anmelden 2. Befehl eingeben echo foo3. Abmelden 4. Erneut anmelden 5. Eintrag löschen für echo foo6. Abmelden 7. Erneut anmelden: Eintrag ist noch vorhanden. Je nachdem, wie Sie Ihren Bash-Verlauf konfiguriert haben, können Sie dieses Problem möglicherweise auf andere Weise reproduzieren - z. B. wenn Sie das Schreiben des Verlaufs vor dem Abmelden provozieren.
Verwenden Sie, um den gesamten Verlauf zu löschen
history -cVerwenden Sie, um eine einzelne Zeile zu löschen
history -d linenumberIch habe dies in meinem ~/.bashrc, was bewirkt, dass der Befehl $ forgetden vorherigen Befehl aus dem Verlauf löscht
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )einfacher?
history | tail -n1ist der historyBefehl selbst, so dass das Löschen dieser Nummer den falschen Eintrag erhält. Allerdings history -d $( history | awk 'END{print $1-1}' )verbindet die Zeilenauswahl, Feldauswahl, und Subtraktion.
Wenn Sie die gesamte Bash-Sitzung vergessen möchten, können Sie killden aktuellen Bash-Vorgang ausführen. Da die Variable $$die pidder aktuellen Shell enthält, können Sie Folgendes tun:
kill -9 $$
Sie müssen die Änderungen schreiben, nachdem Sie den Verlauf gelöscht haben. Und wenn Sie den Befehl "history wipe" nicht in Ihrem Verlauf haben möchten, müssen Sie den Befehl folgendermaßen ausführen:
history -c && history -w && logout
Viel Glück.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done