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 ignorespace
oder ignoreboth
in 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 -w
After 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 -w
ist für Einträge erforderlich, die bereits in die .bash_history
Datei geschrieben wurden. So reproduzieren Sie (z. B. unter CentOS 7 mit Standardkonfiguration): 1. Anmelden 2. Befehl eingeben echo foo
3. Abmelden 4. Erneut anmelden 5. Eintrag löschen für echo foo
6. 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 -c
Verwenden Sie, um eine einzelne Zeile zu löschen
history -d linenumber
Ich habe dies in meinem ~/.bashrc
, was bewirkt, dass der Befehl $ forget
den 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 -n1
ist der history
Befehl 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 kill
den aktuellen Bash-Vorgang ausführen. Da die Variable $$
die pid
der 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