Meine 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):
history | tail -n 10
Das gibt mir so etwas wie
1003 25-04-2016 17:54:52 echo "Command 1"
1004 25-04-2016 17:54:54 echo "Command 2"
1005 25-04-2016 17:54:57 echo "Command 3"
1006 25-04-2016 17:54:59 echo "Command 4"
1007 25-04-2016 17:55:01 echo "Command 5"
1008 25-04-2016 17:55:03 echo "Command 6"
1009 25-04-2016 17:55:07 echo "Command 7"
1010 25-04-2016 17:55:09 echo "Command 8"
1011 25-04-2016 17:55:11 echo "Command 9"
1012 25-04-2016 17:55:14 echo "Command 10"
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.
for h in $(seq 1006 1008); do history -d 1006; done
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):
history 1 | awk '{print $1}'
Wenn Sie es zusammenstellen, können Sie damit einen Bereich löschen und den Befehl zum Löschen des Verlaufs löschen:
for h in $(seq 1006 1008); do history -d 1006; done; history -d $(history 1 | awk '{print $1}')
Wickeln Sie dies alles in eine Funktion ein, die Sie zu Ihrem hinzufügen können ~/.bashrc
:
histdel(){
for h in $(seq $1 $2); do
history -d $1
done
history -d $(history 1 | awk '{print $1}')
}
Beispiel für das Löschen der Befehle 4, 5 und 6 (1049-1051) und das Ausblenden der Beweise:
[18:21:02 jonathag@gb-slo-svb-0221 ~]$ history 11
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:51 echo "Command 4"
1050 25-04-2016 18:20:53 echo "Command 5"
1051 25-04-2016 18:20:54 echo "Command 6"
1052 25-04-2016 18:20:56 echo "Command 7"
1053 25-04-2016 18:20:57 echo "Command 8"
1054 25-04-2016 18:21:00 echo "Command 9"
1055 25-04-2016 18:21:02 echo "Command 10"
1056 25-04-2016 18:21:07 history 11
[18:21:07 jonathag@gb-slo-svb-0221 ~]$ histdel 1049 1051
[18:21:23 jonathag@gb-slo-svb-0221 ~]$ history 8
1046 25-04-2016 18:20:47 echo "Command 1"
1047 25-04-2016 18:20:48 echo "Command 2"
1048 25-04-2016 18:20:50 echo "Command 3"
1049 25-04-2016 18:20:56 echo "Command 7"
1050 25-04-2016 18:20:57 echo "Command 8"
1051 25-04-2016 18:21:00 echo "Command 9"
1052 25-04-2016 18:21:02 echo "Command 10"
1053 25-04-2016 18:21:07 history 11
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.
histdeln(){
# Get the current history number
n=$(history 1 | awk '{print $1}')
# Call histdel with the appropriate range
histdel $(( $n - $1 )) $(( $n - 1 ))
}
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
.
vi $HISTFILE
und löschen Sie, was Sie wollen. Verwendenhead -n -10
Sie diese Option, wenn Sie sie automatisieren müssen.