หากไม่บันทึกคำสั่งเดียวในประวัติของคุณให้นำหน้าด้วยช่องว่าง (ทำเครื่องหมาย␣
ที่นี่):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
พฤติกรรมนี้ตั้งอยู่ใน~/.bashrc
ไฟล์ของคุณซึ่งก็คือในบรรทัดนี้:
HISTCONTROL=ignoreboth
man bash
พูดว่า:
HISTCONTROL
รายการค่าคั่นด้วยโคลอนที่ควบคุมวิธีบันทึกคำสั่งในรายการประวัติ ถ้ารายการของค่ารวมถึง
ignorespace , สายซึ่งเริ่มต้นด้วยอักขระช่องว่างจะไม่ถูกบันทึกในรายการประวัติ ค่าของการเพิกเฉย ทำให้เกิดบรรทัดที่ตรงกับรายการประวัติก่อนหน้านี้ที่จะไม่ถูกบันทึก ค่าของ
ignorebothคือชวเลขignorespaceและignoredups
ignoredups
โดยวิธีคือเหตุผลที่history | tail -n2
ปรากฏเพียงครั้งเดียวในประวัติศาสตร์ในการทดสอบข้างต้น
ประวัติของเทอร์มินัลจะถูกบันทึกไว้ใน RAM และถูกฟลัชชิงไปยังคุณ~/.bash_history
ทันทีที่คุณปิดเทอร์มินัล หากคุณต้องการลบรายการเฉพาะจากคุณ~/.bash_history
คุณสามารถทำได้ด้วยsed
:
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
ในช่วงหนึ่งผมเปลี่ยนคั่นเริ่มต้น/
ที่จะเป็นก็ใช้ในการค้นหาคำในความเป็นจริงนี้จะมีค่าเท่ากับ_
sed -i '/\/path\//d' .bash_history
หากผลคำสั่งเพียงเส้นที่คุณต้องการลบเพิ่ม-i
ตัวเลือกและการเปลี่ยนแปลง!d
ในการd
ที่จะดำเนินการลบ:
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere