Cevabım önceki cevaplara dayanıyor, ancak sırayı tersine çevirmenin yanı sıra, geçmiş öğeleri en yeniden en yeniye doğru silinecek.
Mevcut geçmişinizi alın (görmek istediğiniz satır sayısını ayarlayın):
history | tail -n 10
Bu bana şöyle bir şey veriyor
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"
Silmek istediğiniz öğeler için başlangıç ve bitiş konumlarını seçin. 1006'dan 1008'e kadar olan girişleri sileceğim.
for h in $(seq 1006 1008); do history -d 1006; done
Bu, history -d1006 için komutlar üretir , sonra 1007, 1006 olur ve 1006 silinir, sonra 1008 (1007 oldu) şimdi 1006 olur ve silinir.
Geçmiş silme komutunu da silmek istersem, bu biraz daha karmaşık çünkü mevcut maksimum geçmiş girişini bilmeniz gerekir.
Bunu şununla elde edebilirsiniz (daha iyi bir yol olabilir):
history 1 | awk '{print $1}'
Bir araya getirerek, bir aralığı silmek için bunu kullanabilir ve ayrıca geçmiş silme komutunu da silebilirsiniz:
for h in $(seq 1006 1008); do history -d 1006; done; history -d $(history 1 | awk '{print $1}')
Bunları, aşağıdakilerinize eklemek için bir işlevle özetleyin ~/.bashrc:
histdel(){
for h in $(seq $1 $2); do
history -d $1
done
history -d $(history 1 | awk '{print $1}')
}
Örnek 4, 5 ve 6 (1049-1051) komutunu silme ve kanıtları saklama:
[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
Asıl soru, son 10 komutu geçmişten silmekti, bu nedenle biraz çaba harcamak istiyorsanız histdel, hesaplamaları sizin için yapan işlevi çağırmak için başka bir işlevi kullanabilirsiniz .
histdeln(){
# Get the current history number
n=$(history 1 | awk '{print $1}')
# Call histdel with the appropriate range
histdel $(( $n - $1 )) $(( $n - 1 ))
}
Bu işlev, silinecek önceki geçmiş öğelerinin sayısı olan 1 argüman alır. Bu yüzden son 10 komutu geçmişten silmek için kullanın histdeln 10.
vi $HISTFILEve istediğinizi silin.head -n -10Otomatikleştirmeniz gerekiyorsa kullanın .