วิธีลบบรรทัดเดียวออกจากประวัติ


202

ฉันทำงานใน Mac OSX ดังนั้นฉันเดาว่าฉันใช้ทุบตี ... ?

บางครั้งฉันป้อนบางสิ่งที่ฉันไม่ต้องการให้จดจำในประวัติศาสตร์ ฉันจะลบออกได้อย่างไร


คำตอบ:


338

มาตรการป้องกัน

หากคุณต้องการเรียกใช้คำสั่งโดยไม่บันทึกลงในประวัติให้เติมคำสั่งด้วยช่องว่างเพิ่มเติม

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

สำหรับการทำงานที่คุณต้องการอย่างใดอย่างหนึ่งignorespaceหรือในignoreboth HISTCONTROLตัวอย่างเช่นเรียกใช้

HISTCONTROL=ignorespace

.bashrcเพื่อให้การตั้งค่านี้ถาวรใส่ไว้ในของคุณ

โพสต์ชันสูตรล้าง

หากคุณได้รันคำสั่งแล้วและต้องการลบออกจากประวัติให้ใช้งานครั้งแรก

history

เพื่อแสดงรายการคำสั่งในประวัติของคุณ ค้นหาหมายเลขถัดจากหมายเลขที่คุณต้องการลบ (เช่น 1234) และเรียกใช้

history -d 1234

นอกจากนี้หากบรรทัดที่คุณต้องการลบได้ถูกเขียนไปที่ $ HISTFILE ของคุณแล้ว (ซึ่งมักจะเกิดขึ้นเมื่อคุณสิ้นสุดเซสชันโดยค่าเริ่มต้น) คุณจะต้องเขียนกลับไปที่ $ HISTFILE มิฉะนั้นบรรทัดจะปรากฏขึ้นอีกครั้งเมื่อคุณเปิดใหม่ เซสชั่น:

history -w

มันได้ผล ฉันคิดว่าเราต้องการแหล่งที่มา ~ / .bashrc หลังจากแก้ไขมัน ...
B เซเว่น

3
@ jw013 ฉันตั้งค่า PROMPT_COMMAND เป็นhistory -aในกรณีนั้นมันถูกเขียนไปยังไฟล์ประวัติแทนการออกภายใต้การกำหนดค่าปกติ โดยเฉพาะ: mywiki.wooledge.org/BashFAQ/088
jordanm

5
หลังจากลบบรรทัดเดียวที่คุณจำเป็นต้องเขียนออกประวัติศาสตร์ปัจจุบันถึง $ HISTFILE history -wของคุณโดยใช้ มิฉะนั้นเมื่อคุณออกจากนั้นเส้นที่ถูกลบยังคงอยู่ที่นั่น!
เฟลิเป้อัลวาเรซ

1
+1 กับความคิดเห็นด้านบน; การใช้history -wหลังจากนั้นhistory -d {num}เป็นสิ่งที่ฉันต้องการอย่างแน่นอน - ชิ้นอาหารอันโอชะที่สำคัญควรจะเพิ่มเข้าไปในคำตอบมิฉะนั้นผู้ใช้อาจคิดว่าการลบชั่วคราวจากเชลล์ปัจจุบันนั้นถาวร
ไมเคิล

1
@BobStein history -wจำเป็นสำหรับรายการที่เขียนไปยัง.bash_historyไฟล์แล้ว วิธีการทำซ้ำ (เช่นบน CentOS 7 พร้อมการกำหนดค่าหุ้น): 1. เข้าสู่ระบบ 2. ป้อนคำสั่งecho foo3. ออกจากระบบ 4. เข้าสู่ระบบอีกครั้ง 5. ลบรายการสำหรับecho foo6. ออกจากระบบ 7. เข้าสู่ระบบอีกครั้ง: รายการยังคงอยู่ที่นั่น ขึ้นอยู่กับว่าคุณกำหนดค่าประวัติทุบตีของคุณบางทีคุณสามารถทำให้เกิดปัญหานี้ในรูปแบบอื่นได้เช่นถ้าคุณกระตุ้นการเขียนประวัติก่อนออกจากระบบ
maxschlepzig

53
  1. เพื่อล้างประวัติทั้งหมดของคุณใช้

    history -c
  2. หากต้องการลบบรรทัดเดียวให้ใช้

    history -d linenumber

6

ฉันมีสิ่งนี้ในของฉัน~/.bashrcซึ่งทำให้คำสั่ง$ forgetลบคำสั่งก่อนหน้าจากประวัติ

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}

ดูเหมือนจะซับซ้อนเล็กน้อย จะไม่history -d $( history | tail -n 1 | cut -f 1 -d " " )ง่ายกว่านี้หรือ
seumasmac

1
history | tail -n1คือhistoryคำสั่งเองดังนั้นการลบหมายเลขนั้นจะทำให้เกิดรายการที่ไม่ถูกต้อง อย่างไรก็ตามhistory -d $( history | awk 'END{print $1-1}' )รวมการเลือกบรรทัดการเลือกฟิลด์และการลบ
dave_thompson_085

มีโอกาสใครบางคนสามารถช่วยออกกับ portin นี้เพื่อ zshell?
Alex S

6

คุณสามารถแก้ไขและลบรายการได้~/.bash_historyตลอดเวลามีประโยชน์เมื่อคุณต้องการลบหนึ่งรายการหรือมากกว่าหนึ่งรายการ


2
โอกาสที่รายการเหล่านี้ส่วนใหญ่จะได้รับการแนะนำอีกครั้งเมื่อคุณออกจากเชลล์
l0b0

5

หากคุณต้องการที่จะลืมเซสชั่นทุบตีทั้งหมดคุณสามารถkillกระบวนการทุบตีในปัจจุบัน เนื่องจากตัวแปร$$ถือpidเชลล์ปัจจุบันคุณจึงสามารถทำ:

kill -9 $$

1

คุณต้องเขียนการเปลี่ยนแปลงหลังจากคุณล้างประวัติ และหากคุณไม่ต้องการให้มีคำสั่งล้างประวัติในประวัติของคุณคุณจำเป็นต้องเรียกใช้คำสั่งเช่นนั้น:

history -c && history -w && logout

โชคดี.


-1
Adding another point suppose if you want to delete a range of history lines

You can use below script. 

Below example will delete history output from line 1 to line 150.

for i in `history | awk 'NR > 1 && NR <=150{print   $1}'`; do history -d $i; done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.