Befehle folgen
511 clear
512 history
513 history -d 505
514 history
515 history -d 507 510 513
516 history
517 history -d 509
518 history
519 history -d 511
520 history
Ich kann einzelne löschen history -d 511
, aber wie lösche ich die letzten 10 Befehle und den Verlauf zwischen 10 Befehlen mit einem einzelnen Befehl in der Shell?
Können wir ein Bash-Skript schreiben und zum Löschen des Verlaufs ausführen?
vi $HISTFILE
und löschen Sie, was Sie wollen. Verwendenhead -n -10
Sie diese Option, wenn Sie sie automatisieren müssen.Antworten:
Haben Sie versucht, die Verlaufsdatei direkt zu bearbeiten:
quelle
~/.viminfo
Entfernen Sie diesen auch!.bash_history
durch das, was im Speicher gespeichert ist, überschrieben werden können. Ich fand diese Lösung hilfreich: superuser.com/a/384383/253543Meine Antwort basiert auf vorherigen Antworten, jedoch mit der Hinzufügung einer umgekehrten Reihenfolge, sodass Verlaufselemente von den neuesten zu den letzten Nachrichten gelöscht werden.
Holen Sie sich Ihren aktuellen Verlauf (passen Sie die Anzahl der Zeilen an, die Sie sehen möchten):
Das gibt mir so etwas wie
Wählen Sie die Start- und Endpositionen für die Elemente aus, die Sie löschen möchten. Ich werde die Einträge 1006 bis 1008 löschen.
Dies erzeugt
history -d
Befehle für 1006, dann wird 1007 zu 1006 und 1006 wird gelöscht, dann ist 1008 (wurde 1007) jetzt 1006 und wird gelöscht.Wenn ich auch den Befehl zum Löschen des Verlaufs löschen wollte, ist dies etwas komplizierter, da Sie den aktuellen Eintrag für den maximalen Verlauf kennen müssen.
Sie können dies mit bekommen (es kann einen besseren Weg geben):
Wenn Sie es zusammenstellen, können Sie damit einen Bereich löschen und den Befehl zum Löschen des Verlaufs löschen:
Wickeln Sie dies alles in eine Funktion ein, die Sie zu Ihrem hinzufügen können
~/.bashrc
:Beispiel für das Löschen der Befehle 4, 5 und 6 (1049-1051) und das Ausblenden der Beweise:
Die Frage war eigentlich, die letzten 10 Befehle aus dem Verlauf zu löschen. Wenn Sie also ein wenig Aufwand sparen möchten, können Sie eine andere Funktion verwenden, um die
histdel
Funktion aufzurufen, die die Berechnungen für Sie ausführt.Diese Funktion benötigt 1 Argument, die Anzahl der zu löschenden vorherigen Verlaufselemente. Um die letzten 10 Befehle aus dem Verlauf zu löschen, verwenden Sie einfach
histdeln 10
.quelle
history | tail -1 | awk '{print $1}'
kann vereinfacht werden zuhistory 1 | awk '{print $1}'
-bash: tac: command not found
unter Mac OSX wäre dies sonst die beste Antwort.for h in $(seq 1006 1008); do history -d 1006; done
Dies funktioniert in Ubuntu 16.04for i in {1..10}; do history -d $(($HISTCMD-11)); done
quelle
history -d 511
funktioniert es wie erwartet,history -d 512
löscht dann das, was früher 513 war, und 512 bleibt als Befehl 511 in der Historie. Hoffnung, die Sinn macht .$x
jedes Mal durch die Schleife, ich lösche$1
. Also löscht es zuerst 511 und 512 wird 511. Dann löscht es wieder 511 und so weiter.for i in
... undhistory -d $i
die Ergebnisse erhalten habe, die ich in meinem obigen Kommentar beschrieben habe. Mit $ 1 ist dies absolut korrekt, wie in Ihrer ursprünglichen Antwort angegeben.Zuerst Typ:
history
und notieren Sie die Reihenfolge der Zeilennummern Sie entfernen möchten.Um die Zeilen von Zeile 1800 bis 1815 zu löschen, schreiben Sie Folgendes in das Terminal:
Wenn Sie den Verlauf für den Löschbefehl löschen möchten, fügen Sie +1 für 1815 = 1816 und den Verlauf für diese Sequenz hinzu. + Der Löschbefehl wird gelöscht.
Zum Beispiel :
quelle
$line
löscht und dann den gewünschten Bereich überschreitet.Mit Bash 5 kannst du jetzt eine Reihe machen ... Hurra!:
oder rückwärts zählen 10:
Auszug aus der Bash 5 Man Page :
Hier ist meine Lösung für Bash 4. Sie löscht iterativ einen einzelnen Eintrag oder einen Verlaufsbereich, beginnend mit dem niedrigsten Index.
quelle
Antworten von oben kombinieren:
history -w vi ~/.bash_history history -r
quelle
bearbeiten:
Die geschweiften Iteratoren wurden geändert, guter Anruf. Rufen Sie diese Funktion auch mit einem Reverse-Iterator auf.
Sie können wahrscheinlich so etwas tun:
Wo Sie so hervorrufen werden:
Beachten Sie, dass ich keine Fehler beim Einchecken für die Grenzen eingegeben habe. Das überlasse ich dem Leser als Übung.
siehe auch diese Frage
quelle
seq 563 514
druckt nichts. Du brauchstseq 563 -1 514
. Alternativ können Sie einfachhistory -d $1
mit Argumenten als514 563
Vielleicht wird es für jemanden nützlich sein.
Wenn Sie sich bei einem Benutzer eines Konsolen- / Terminalverlaufs Ihrer aktuellen Sitzung anmelden, ist dieser nur in einem "Puffer" vorhanden, der beim Abmelden in ~ / .bash_history geleert wird.
Um die Dinge geheim zu halten, können Sie einfach:
history -r && exit
und Sie werden abgemeldet, wenn der gesamte (und einzige) Verlauf Ihrer Sitzung gelöscht ist;)
quelle
Ich habe eine Kombination von Lösungen verwendet, die in diesem Thread verwendet werden, um die Ablaufverfolgung im Befehlsverlauf zu löschen. Zuerst habe ich überprüft, wo der Befehlsverlauf gespeichert ist mit:
Ich habe den Verlauf bearbeitet mit:
Danach entleere ich den aktuellen Sitzungsverlaufspuffer mit:
Wenn Sie das nächste Mal in diese Sitzung eintreten, ist der letzte Befehl, den Sie im Befehlsverlauf sehen, der letzte, den Sie in pathToFile hinterlassen haben .
quelle
history -c löscht alle Historien.
quelle
Ich benutze dieses Skript, um die letzten 10 Befehle im Verlauf zu löschen:
Es verwendet die
$HISTCMD
Umgebungsvariable, um den Verlaufsindex abzurufen, und verwendet diese, um die letzten 10 Einträge in zu löschenhistory
.quelle
Versuche Folgendes:
quelle
for i in {511..520}; do history -d $i; echo "history -d 511"; done
Ich benutze dies (ich habe Bash 4):
Die
builtin history
Teile wie auch die letzten-w
sind, weil ich eine Variation der berühmten Tricks eingerichtet habe, um die Geschichte über Terminals hinweg zu teilen, und diese Funktion würde ohne diese Teile brechen. Sie sorgen für einen Anruf bei der echten Bashhistory
eingebaute (und nicht mein eigener Wrapper) aufgerufen wird und der Verlauf direkt nach dem Entfernen der Einträge in HISTFILE geschrieben wird.Dies funktioniert jedoch wie bei "normalen" Verlaufskonfigurationen.
Sie sollten es mit der Anzahl der letzten Einträge aufrufen, die Sie entfernen möchten, zum Beispiel:
Entfernt die letzten 10 Einträge.
quelle
Brute aber funktional
quelle
Wenn Sie 10 Zeilen löschen möchten, ändern Sie einfach den Wert von N in 10.
quelle
Eine einfache Funktion kann alle nach Zahlen töten (obwohl sie Fehler verhindert)
quelle
So löschen Sie die letzten 10 Einträge (basierend auf Ihrem Beispiel):
quelle
Kurz aber süß:
for i in {1..10}; do history -d $(($HISTCMD-11)); done
quelle