ฉันใช้ bash และฉันต้องการหลีกเลี่ยงคำสั่งบางอย่างที่ถูกเก็บไว้ในประวัติศาสตร์
- เป็นไปได้ไหมที่จะทำเช่นนั้นสำหรับคำสั่งถัดไปเท่านั้น?
- เป็นไปได้ไหมที่จะทำเช่นนั้นตลอดทั้งเซสชัน?
ฉันใช้ bash และฉันต้องการหลีกเลี่ยงคำสั่งบางอย่างที่ถูกเก็บไว้ในประวัติศาสตร์
คำตอบ:
และฉันเพิ่งจำคำตอบอื่นได้คำตอบนี้เป็นคำตอบที่แท้จริงสำหรับคำถามของคุณ
ถ้าคุณมี "ignorespace" ใน HISTCONTROL แล้ว bash จะไม่จดจำบรรทัดใด ๆ ที่ขึ้นต้นด้วยอักขระเว้นวรรค มันจะไม่ปรากฏแม้ในประวัติของเชลล์ปัจจุบันให้บันทึกเพียงอย่างเดียวใน $ HISTFILE
เช่นฉันได้ส่งออก HISTCONTROL = 'ignboth: erasedups'ใน ~ / .bashrc ของฉัน
นี่คือรายละเอียดจากหน้าคนทุบตี:
HISTCONTROL รายการค่าคั่นด้วยโคลอนที่ควบคุมวิธีการใช้คำสั่ง บันทึกไว้ในรายการประวัติ หากรายการของค่ารวมถึง บรรทัดที่เริ่มต้นด้วยอักขระช่องว่างนั้นไม่ใช่ บันทึกไว้ในรายการประวัติ ค่าของการเพิกเฉยทำให้เกิดบรรทัด ตรงกับรายการประวัติก่อนหน้านี้ที่จะไม่ถูกบันทึก ค่าของ ignboth เป็นชวเลขสำหรับการเพิกเฉยและการเพิกเฉย ค่า ของการลบทำให้เกิดบรรทัดก่อนหน้าทั้งหมดที่ตรงกับบรรทัดปัจจุบัน ที่จะลบออกจากรายการประวัติก่อนที่จะบันทึกบรรทัดนั้น ค่าใด ๆ ที่ไม่อยู่ในรายการด้านบนจะถูกละเว้น ถ้า HISTCONTROL เป็น unset หรือไม่มีค่าที่ถูกต้องทุกบรรทัดที่อ่านโดย ตัวแยกวิเคราะห์เชลล์จะถูกบันทึกในรายการประวัติภายใต้ค่า ของ HISTIGNORE บรรทัดที่สองและต่อมาของหลายบรรทัด คำสั่งผสมจะไม่ถูกทดสอบและถูกเพิ่มเข้าไปในประวัติ โดยไม่คำนึงถึงมูลค่าของ HISTCONTROL
นี่คือบทเรียนประวัติศาสตร์เล็กน้อยที่ฉันเรียนรู้จาก googling:
คุณสามารถตั้งค่าประวัติให้ละเว้นสตริงที่แน่นอนได้ ในตัวอย่างนี้ฉันไม่สนใจคำสั่ง ls, passwd และคำสั่งใด ๆ นำหน้าด้วยช่องว่างอักขระ
ส่งออก HISTIGNORE = "ls: passwd:"
หากต้องการปิดใช้งานประวัติสำหรับเซสชันของคุณคุณสามารถออก:
ส่งออก HISTSIZE = 0
หากคุณต้องการลบคำสั่งสุดท้ายออกจากประวัติคุณสามารถกดUp-arrowตามด้วยCtrl - U(ลบถึงจุดเริ่มต้นบรรทัด) จากนั้นUp-arrowอีกครั้ง
คุณสามารถลบบรรทัดใด ๆ จากประวัติเช่นนี้ เพียงใช้ลูกศรชี้ขึ้นหรือค้นหาหรืออะไรก็ตามที่ทำให้บรรทัดคำสั่งปัจจุบันถูกแก้ไขจากนั้นกดCtrl - Uและจากนั้นUp-arrowหรือDown-arrowเพื่อย้ายไปยังบรรทัดประวัติอื่น
ฉันค้นพบสิ่งนี้โดยบังเอิญเมื่อวันที่ผ่านมาหลายปี ฉันไม่รู้ว่ามันเป็นเอกสารหรือไม่
โดยทั่วไปแล้วมันเป็นเรื่องยุ่งยากน้อยกว่าที่จะไม่บันทึกประวัติของเชลล์ปัจจุบันด้วย:
HISTFILE=/dev/null
คุณสามารถยกเลิกการตั้งค่าHISTFILE
ตัวแปร จากman bash
:
HISTFILE ชื่อของไฟล์ที่บันทึกคำสั่งประวัติ (ดู HIS- TORY ด้านล่าง) ค่าเริ่มต้นคือ ~ / .bash_history หากไม่มีการตั้งค่า ประวัติคำสั่งจะไม่ถูกบันทึกเมื่อเชลล์แบบโต้ตอบ ทางออก
ฉันไม่คิดว่าสิ่งนี้จะป้องกันไม่ให้คำสั่งปรากฏในประวัติเชลล์ท้องถิ่นก่อนที่เชลล์จะออก
บางครั้งฉันก็ทำ
export HISTFILE=/dev/null
ฉันเห็นว่าไม่มีใครเขียนวิธีนี้ดังนั้นฉันจะ
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
ลบรายการที่กล่าวถึงจากประวัติ
HISTCMD
เก็บ command_number ของคำสั่งที่จะดำเนินการต่อไป ดังนั้น (HISTCMD-1) หมายถึงคำสั่งที่ดำเนินการครั้งสุดท้าย
ฉันทำหนังทุบตีสั้น ๆ ซึ่งแสดงวิธีการทำงาน: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
หลังจากรันคำสั่งและเนื่องจากมันลบคำสั่งด้วยตัวเองดังนั้นการขึ้นไปด้วยลูกศรจะไม่แสดงคำสั่งดังนั้นหากคุณวางแผนที่จะใช้บ่อยๆมันจะเป็นการดีที่สุดที่จะสร้างนามแฝง:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
จากนั้นคุณสามารถทำได้:
$ hc command