วิธีการป้องกัน Bash จากการเปลี่ยนแปลงประวัติศาสตร์?


26

ถ้าฉันกดลูกศรขึ้นหรือลงบนแป้นพิมพ์แล้วแก้ไขบางอย่างจากประวัติของฉันมันจะเปลี่ยนไปตลอดกาล แม้ว่าฉันกด Ctrl-C จากนั้นลองนำมันขึ้นมาอีกครั้งมันก็ยังเปลี่ยนไป - ฉันทำรายการนั้นหายไปในประวัติศาสตร์

ฉันจะป้องกันไม่ให้สิ่งนี้เกิดขึ้นได้อย่างไร


3
ฉันรักชื่อของคำถามนี้ คุณสามารถแก้ไขประวัติศาสตร์และบ่นได้ไหม? เกิดอะไรขึ้นกับคุณ?!
Daniel Beck

@Daniel: ฮ่า ๆ ใช่ ... ฉันหมายถึงมันเหมือนกับว่าฉันได้เปลี่ยนอดีตของฉัน ไร้สาระอย่างเห็นได้ชัดและมันก็น่ารำคาญน่าหัวเราะหลังจากนั้นไม่นาน : \
Mehrdad

Btw หากคุณใช้ history-search-xxxแทนพฤติกรรมจะแตกต่างกัน บางทีนั่นอาจเป็นอะไรสำหรับคุณ
Daniel Beck

@Daniel: มันมีประโยชน์จริง ๆ - ขอบคุณมาก แต่ถึงกระนั้นฉันอยากจะรู้คำตอบสำหรับคำถามนี้เพราะบางครั้งคำสั่งไม่ได้ดูเหมือนกันมากและไม่ได้ผล
Mehrdad

ประวัติการค้นหาด้วยพรอมต์ที่ว่างเปล่าทำงานเหมือนกับประวัติปกติ prev / next เช่นแสดงรายการทั้งหมด
Daniel Beck

คำตอบ:


17

คุณต้องการตั้งค่า readline:

set revert-all-at-newline on

คุณสามารถวางไว้ใน~/.inputrc(ดูหมายเหตุด้านล่าง) หรือใส่ในของคุณbind 'revert-all-at-newline on'~/.bashrc

การสาธิต:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

รายละเอียดเพิ่มเติมอยู่ในBash manpage :

revert-all-at-newline

หากตั้งค่าเป็น ' on' Readline จะยกเลิกการเปลี่ยนแปลงทั้งหมดในประวัติบรรทัดก่อนส่งคืนเมื่อเรียกใช้งานบรรทัดการเรียกใช้ ตามค่าเริ่มต้นบรรทัดประวัติอาจถูกแก้ไขและเก็บรักษารายการเลิกทำแต่ละรายการระหว่างการโทรไปยัง readline ค่าเริ่มต้นคือ ' off'


บันทึก:

ถ้าใหม่~/.inputrcไฟล์ถูกสร้างขึ้นเพื่อวัตถุประสงค์ของการตั้งค่าrevert-all-at-newlineจะทราบว่าทุบตีจะใช้การตั้งค่าที่ ReadLine ในแฟ้มนี้แทนการตั้งค่าใด ๆ /etc/inputrcซึ่งอาจจะเป็นในแฟ้ม นั่นคือการตั้งค่าใด ๆ ที่ระบุไว้/etc/inputrcจะไม่มีผลอีกต่อไป ดังนั้นหาก/etc/inputrcไฟล์มีอยู่คุณควรเริ่มต้น~/.inputrcด้วยบรรทัด:

$include /etc/inputrc


คุณยอดเยี่ยมนั่นคือสิ่งที่ฉันต้องการ ฉันจะไม่ต่อยจอมอนิเตอร์ของฉันอีกต่อไป : D +1000000 (ฉันต้องการ)
Mehrdad

5

ฉันป้อน:

ls /tmp

- วิเศษ ตอนนี้ฉันไม่ต้องการเข้า

ls /temp 

และสามารถป้องกันการป้อนประวัติดังนั้นป้องกันการเขียนทับ ls / tmp หากฉันเริ่มต้นคำสั่งด้วยช่องว่าง:

 ls /temp

มันยากที่จะเห็น แต่ถ้าคุณรู้ ...

มันถูกควบคุมโดย

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

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

แต่บางทีคุณอาจจะออกไปแก้ปัญหาที่คุณจบด้วยคำสั่งทั้งคู่เก่าที่ยังไม่ได้แก้ไขและใหม่ การทุบตีหรือการตั้งค่าเวอร์ชันของฉันมีลักษณะเช่นนี้ แต่ฉันไม่รู้ว่าอะไรแตกต่างจากของคุณ


ฮา; ฉันมักจะสันนิษฐานว่าไม่ได้บันทึกคำสั่งที่มีพื้นที่นำหน้าเป็นข้อบกพร่อง ขอบคุณ :)
sarnold
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.