私の回答は以前の回答に基づいていますが、順序を逆にして、履歴アイテムが最新のものから最も古いものへと削除されるようにしています。
現在の履歴を取得します(表示する行数を調整します):
history | tail -n 10
これは私に次のようなものを与えます
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"
削除するアイテムの開始位置と終了位置を選択します。1006から1008のエントリを削除します。
for h in $(seq 1006 1008); do history -d 1006; done
これによりhistory -d
、1006のコマンドが生成され、1007が1006になり、1006が削除され、1008(1007になった)が1006になり、削除されます。
履歴削除コマンドも削除したい場合は、現在の最大履歴エントリを知る必要があるため、少し複雑になります。
あなたはこれを得ることができます(より良い方法があるかもしれません):
history 1 | awk '{print $1}'
まとめると、これを使用して範囲を削除したり、履歴削除コマンドを削除したりできます。
for h in $(seq 1006 1008); do history -d 1006; done; history -d $(history 1 | awk '{print $1}')
これを関数にまとめて、に追加します~/.bashrc
:
histdel(){
for h in $(seq $1 $2); do
history -d $1
done
history -d $(history 1 | awk '{print $1}')
}
コマンド4、5、6(1049-1051)を削除して証拠を隠す例:
[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
問題は、実際に最後の10個のコマンドを履歴から削除することでした。そのため、少しの労力を節約したい場合は、別の関数を使用histdel
して、計算を行う関数を呼び出すことができます。
histdeln(){
# Get the current history number
n=$(history 1 | awk '{print $1}')
# Call histdel with the appropriate range
histdel $(( $n - $1 )) $(( $n - 1 ))
}
この関数は、削除する前の履歴項目の数である1つの引数を取ります。したがって、履歴から最後の10個のコマンドを削除するには、を使用しますhistdeln 10
。
vi $HISTFILE
必要なものを削除します。head -n -10
自動化する必要がある場合に使用します。