คำตอบของฉันขึ้นอยู่กับคำตอบก่อนหน้านี้ แต่ด้วยการเพิ่มการย้อนกลับลำดับเพื่อให้รายการประวัติถูกลบจากล่าสุดไปหาน้อยที่สุด
รับประวัติปัจจุบันของคุณ (ปรับจำนวนบรรทัดที่คุณต้องการดู):
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
หากคุณต้องทำให้เป็นอัตโนมัติ